如何逃避`forfiles`中的`@`变量替换?

时间:2015-09-04 15:25:41

标签: batch-file for-loop cmd escaping forfiles

我正在使用forfiles这样的命令行(Windows 7 x64):

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

如何从@relpath(当前迭代项的相对路径)的替换中转义以获得@relpath字面输出? (...或任何其他@变量?)

到目前为止,我尝试了以下方法,但没有成功:

  • \@似乎在\之前处理,因此\@relpath不起作用,而扩展的输出前面只有\; < / LI>
  • ^:除了^@消失外,陈述^没有任何效果;撰写^^@并没有帮助,一个^仍然在扩展输出中;
  • 0xHH:令我惊讶的是(对我而言),forfiles - 特定的十六进制数0x40的替换也不起作用,似乎这是在变量解析之前完成的;
  • @@@翻倍,保留第一个@字面意思,就是它;

2 个答案:

答案 0 :(得分:3)

您可以使用延迟扩展

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"

答案 1 :(得分:2)

我刚刚找到了一种更简单的方法:

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

在{/ 1}}符号之后注意^