Как получить путь сценария пакетной обработки без запаздывающей обратной косой черты в единственной команде?

Предположим, что я хочу получить полный путь сценария пакетной обработки из самого сценария пакетной обработки, но без запаздывающей обратной косой черты. Обычно, я делаю это этот путь:

SET BuildDir=%~dp0
SET BuildDir=%BuildDir:~0,-1%

Первый оператор получает путь с запаздывающей обратной косой чертой, и вторая строка удаляет последний знак, т.е. обратную косую черту. Существует ли способ объединить эти два оператора в одну строку кода?

32
задан Anthony Mastrean 28 June 2012 в 17:15
поделиться

2 ответа

Только с отложенным раскрытием, когда вы записываете оба оператора в одну строку:

set BuildDir=%~dp0&&set BuildDir=!BuildDir:~0,-1!

Но это вроде как противоречит цели.

6
ответ дан 27 November 2019 в 20:51
поделиться

Я хотел бы отметить, что использовать трюки с подстрокой для переменных, содержащих пути к файловой системе, небезопасно, слишком много символов, таких как!, ^,%, Которые являются допустимыми именами папок / файлов, и есть нет способа правильно избежать их всех

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

2
ответ дан 27 November 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: