For loop 如何在“forfiles”的正文中转义%s`%`符号?
我正在使用For loop 如何在“forfiles”的正文中转义%s`%`符号?,for-loop,cmd,escaping,For Loop,Cmd,Escaping,我正在使用forfiles/S对目录树进行迭代。我直接在命令提示符下运行它 要查找当前目录,我想展开内置变量%CD%,但不能立即展开(显示为文件执行的命令提示符实例的当前目录),但是使用%进行转义,转义方式是%CD%由for files主体中的命令提示符实例展开 forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /C echo %CD%" 有没有办法转义%,从而从主命令解释器实例中隐藏它? 我尝试了%%(在批处理文件中可以正常工作),^%%,\%%,甚至用
forfiles/S
对目录树进行迭代。我直接在命令提示符下运行它
要查找当前目录,我想展开内置变量%CD%
,但不能立即展开(显示为文件执行的命令提示符实例的当前目录),但是使用%
进行转义,转义方式是%CD%
由for files
主体中的命令提示符实例展开
forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /C echo %CD%"
有没有办法转义%
,从而从主命令解释器实例中隐藏它?
我尝试了%%
(在批处理文件中可以正常工作),^%%
,\%%
,甚至用普通引号和转义引号(%CD%”“
/\%CD%\”
)括住%\
)括起来,但迄今为止我没有成功
我知道我可以像下面这样使用,但我想避免:
forfiles /S /P "D:\Data" /M "*.txt" /C "cmd /V:ON /C echo !CD!"
在命令行中,如果不转义百分号,变量将直接替换为其值,但如果转义(使用插入符号)
由于命令被括在引号中(forfiles
命令中的要求),因此不会删除插入符号,并且会为每个文件回显文本%cd%
(有插入符号转义为百分号)
最简单的解决方案不是转义百分号,而是使用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%"
非常感谢。如果我没有弄错的话,使用变量的第二个方法不仅限于for files
,它还可以用于其他使用引号括起来的字符串的命令。
set myCommand=cmd /c echo ^%cd^%
forfiles /S /P "D:\Data" /M "*.txt" /C "%myCommand%"