我正在使用像这样的
forfiles
命令行(Windows 7 x64):
forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @relpath"
如何逃避替换
@relpath
(当前迭代项的相对路径)以获得字面意义的 @relpath
输出? (...或任何其他 @
变量?)
到目前为止,我尝试了以下方法,但没有成功:
\
:@
似乎在\
之前处理,因此\@relpath
不起作用,而是扩展输出前面带有\
;^
:说出^@
除了^
消失外没有任何效果;写 ^^@
没有帮助,那么扩展输出中仍保留一个 ^
;0xHH
:令人惊讶的是(对我来说),forfiles
特定的十六进制数字替换0x40
也不起作用,似乎这是在变量解析之前完成的;@@
:将 @
加倍,保留第一个 @
,就是这样;您可以使用延迟扩展
forfiles /P "C:\temp" /M "st*.txt" /C "cmd /v:on /C set at=@& echo !at!relpath"
或者您可以使用百分比扩展。
set "percent=%"
set "at=@"
forfiles /P "C:\temp" /M "st*.txt" /C "cmd /C echo %percent%at%percent%relpath"
另一种选择是插入回车符,回车符在输出之前被删除。
forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @0x0Drelpath"
我刚刚找到了一个更简单的方法:
forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath"
注意
^
在@
符号之后。