Мне нужно вызвать командный файл с командой, которую я хочу выполнить. Эта команда содержит псевдо-переменную% cd%, которая раскрывается в текущий каталог. Скажем, я хочу запустить test "echo %cd%" . Проблема в том, что %cd% расширяется до вызова test .

Обычно вы можете экранировать переменную, удваивая знаки процента, но это не относится к псевдопеременным. Например, echo %%ProgramFiles%% напечатает %ProgramFiles% , но echo %%errorlevel%% выведет %0% . Что я делаю?

2 ответа2

1

Экранирующий символ общего назначения в командной строке Windows - аналог \ в остальной части юниверса - это символ каретки (^).  Попробуйте « ^%cd^% ».

(Редактировать)

… а потом,

echo %1 > temp.bat
call temp.bat
del temp.bat

Да, это ужасно некрасиво, и действительно должен быть лучший способ.  Ну, я не могу найти это.

0

У меня не будет большой удачи без участия CALL. С этим test.bat:

@%*

Вызов test.bat call echo ^% cd ^% работает как положено. Или, поместив CALL в test.bat:

@CALL %*

и вызов test.bat echo ^% cd ^% работает. (В любом случае это безопаснее, так как если test.bat вызывается из другого скрипта, то передача ему скрипта не приведет к риску преждевременного выхода.)

Я полагаю, что работает лучше для вас (или если можно заставить работать вообще), зависит от специфики вашего сценария.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .