2015-08-18 5 views
1

Я использую forfiles /S для итерации по дереву каталогов. Я запускаю его непосредственно в командной строке .
Чтобы узнать текущий каталог, я хочу развернуть встроенную переменную %CD%, но не сразу (показывая текущий каталог экземпляра командной строки, который выполняет forfiles), но с % экранирован таким образом, что %CD% расширяется экземпляр командной строки в теле forfiles.Как избежать процента `%` знак в теле `forfiles`?

forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /C echo %CD%" 

Есть ли способ избежать % и так вроде скрыть его от основного экземпляра интерпретатора командной строки?
Я попытался %% (который прекрасно работает в пакетном файле), ^%, \%, и даже заключая %CD% в простом и спасся кавычки ("%CD%"/\"%CD%\"), но я не имел никакого успеха до сих пор.

Я знаю, что я мог бы использовать delayed expansion как следующий, но я хочу, чтобы избежать этого:

forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /V:ON /C echo !CD!" 

ответ

1

Из командной строки, если не избежать знак процента, переменная непосредственно заменяется его значением , но если вы избежать его (с кареткой),

forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /C echo ^%CD^%" 

как команда заключена в кавычках (forfiles требования в вашей команде) в CARETS не удаляется, а буквальный %cd% (есть CARETS выделяющихся знаков процента) является ech для каждого файла.

Самое простое решение не бежать знаки процента, но использовать специальный менеджмент символов в forfiles команды, заменив проблемное % со значением ASCII кода

forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /C echo 0x25cd0x25" 

Или, вы можете задать команду внутри переменную, а затем использовать ее

set myCommand=cmd /c echo ^%cd^% 
forfiles /S /P "D:\Data" /M "*.txt" /C "%myCommand%" 
+0

Спасибо! Если я получу это правильно, вторая работа с использованием переменной не ограничивается 'forfiles', она также может использоваться для других команд, которые принимают цитируемые строки. – aschipfl

Смежные вопросы