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%"