Как избежать замены переменной `@` в `forfiles`?

Я использую forfiles командная строка вот так (Windows 7 x64):

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @relpath"

Как я могу избежать замены @relpath (относительный путь к текущему элементу итерации), чтобы получить @relpath вывод буквально? (... или любой другой @ переменная?)


До сих пор безуспешно пробовал следующие вещи:

  • \: @ кажется, обрабатываются раньше \ так \@relpath не работает, скорее расширенному выводу просто предшествует \;
  • ^: заявив ^@ не показывает никакого эффекта за исключением того, что ^ исчезает; пишу ^^@ не помогает ни один, один ^ остается в расширенном выводе тогда;
  • 0xHH: удивительно (для меня), forfilesзамена шестнадцатеричных чисел 0x40 тоже не работает, похоже, это делается до разбора переменной;
  • @@: удвоение @ держит первым @ буквально это так;

2 ответа

Решение

Я только что нашел еще более простой метод:

forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath"

Обратите внимание ^ после @ знак.

Вы можете использовать отложенное расширение

forfiles /P "C:\temp" /M "st*.txt" /C "cmd /v:on /C set r=0x40 & echo !r:~0,1!relpath"

Или вы можете использовать процент расширения.

set percent=%
set at=@
forfiles /P "C:\temp" /M "st*.txt" /C "cmd /C echo %percent%at%percent%relpath"
Другие вопросы по тегам