У меня есть следующая вещь в моем bat-файле. сказать
набор path=c:\temp\test
так в основном я хочу иметь вывод, который дал бы мне результат как c:\temp\
я не нашел indexof эквивалента в bat команде.
Спасибо.
Зачем вам это?
Ответ Йоханнеса является возможным решением, но, возможно, путь, на который вы ссылаетесь, передается (или может быть) передан в качестве аргумента сценарию, и в этом случае вы можете использовать следующий синтаксис:
REM Extracts the drive and path from argument %1
SET p=%~dp1
В качестве альтернативы вы может сочетать ..
и путь скрипта (% 0
):
REM Sets p to a sibling of the script directory
SET p=%~dp0..\test
У простых подстрок есть проблема, заключающаяся в том, что вы должны корректировать их каждый раз, когда ваши пути меняются, и это не общее решение проблемы.
Следующий командный файл демонстрирует концепцию того, как можно выполнить усечение части пути:
@echo off
set foo=C:\Temp\Test
call :strip
echo %foo%
goto :eof
:strip
if not "%foo:~-1%"=="\" (
set foo=%foo:~0,-1%
goto :strip
)
goto :eof
Он жестко привязан к одной переменной, но при необходимости это легко исправить.
Основной частью здесь является подпрограмма strip
, которая выполняет цикл и отсекает последний символ строки до тех пор, пока не будет найдена обратная косая черта. Это эффективно удаляет последнюю часть пути.
Вопрос, который действительно заставляет меня желать, чтобы 4DOS все еще существовала. Однако я нашел кое-что, что могло бы помочь в alt.msdos.batch.nt
. Страница справочника для набора
, кажется, содержит большую часть той же информации. (команда help set
)
set test=123456789
rem extract chars 0-5 from the variable test
set test=%test:~0,5%
echo %test%
(Примечание: проверено на Windows XP SP3)