转义Windows批处理文件中的&符号

Bry*_*yan 6 windows escaping batch-file

我意识到你可以使用hat字符在批处理文件中转义&符号

例如

echo a ^& b
a & b
Run Code Online (Sandbox Code Playgroud)

但我正在使用该命令

for /f "tokens=*" %%A IN ('DIR /B /A-D /S .acl') DO ProcessACL.cmd "%%A"
Run Code Online (Sandbox Code Playgroud)

它查找当前目录中名为".acl"的所有文件,或当前目录的子目录.

问题是,我找到包含'&'字符的路径名(不,它们不能重命名),我需要一种方法来自动转义&符号并使用转义路径调用第二个批处理文件参数.

rem ProcessACL.cmd
echo %1
Run Code Online (Sandbox Code Playgroud)

jeb*_*jeb 7

问题不在于逃避,似乎是在第二个脚本中.

如果有像这样的行

echo %1
Run Code Online (Sandbox Code Playgroud)

然后它会扩展并失败:

echo You & me.acl
Run Code Online (Sandbox Code Playgroud)

最好使用延迟扩展

setlocal EnableDelayedExpansion
set "var=%~1"
echo !var!
Run Code Online (Sandbox Code Playgroud)

为避免!参数中感叹号出现问题,set应首先在DisabledDelayedExpansion上下文中使用第一个感叹号.

set "var=%~1"
setlocal EnableDelayedExpansion
echo !var!
Run Code Online (Sandbox Code Playgroud)