Предположим, что я хочу получить полный путь сценария пакетной обработки из самого сценария пакетной обработки, но без запаздывающей обратной косой черты. Обычно, я делаю это этот путь:
SET BuildDir=%~dp0
SET BuildDir=%BuildDir:~0,-1%
Первый оператор получает путь с запаздывающей обратной косой чертой, и вторая строка удаляет последний знак, т.е. обратную косую черту. Существует ли способ объединить эти два оператора в одну строку кода?
Только с отложенным раскрытием, когда вы записываете оба оператора в одну строку:
set BuildDir=%~dp0&&set BuildDir=!BuildDir:~0,-1!
Но это вроде как противоречит цели.
Я хотел бы отметить, что использовать трюки с подстрокой для переменных, содержащих пути к файловой системе, небезопасно, слишком много символов, таких как!, ^,%, Которые являются допустимыми именами папок / файлов, и есть нет способа правильно избежать их всех
FOR / D, похоже, удаляет конечную обратную косую черту, поэтому вот версия, которая использует для:
setlocal enableextensions enabledelayedexpansion&set _CD=%CD%&cd /D "%~dp0"&(FOR /D %%a IN ("!CD!") DO ((cd /D !_CD!)&endlocal&set "BuildDir=%%~a"))
Для этого требуется Win2000 и, вероятно, не удастся, если командный файл находится на пути UNC