如何转义 `forfiles` 中的 `@` 变量替换?
How to escape the `@` variable replacement in `forfiles`?
我正在使用这样的 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 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"
我刚找到一个更简单的方法:
forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath"
注意^
在 @
符号之后。
我正在使用这样的 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 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"
我刚找到一个更简单的方法:
forfiles /P "C:\root" /M "*.txt" /C "cmd /C echo @^relpath"
注意^
在 @
符号之后。