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

aor9mmx1  于 2022-11-30  发布在  Windows
关注(0)|答案(2)|浏览(213)

我知道你可以在批处理文件中使用帽子字符来转义&符号
例如:

echo a ^& b
a & b

但我使用的命令

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

即在当前目录或当前目录的子目录中查找所有名为.“acl”的文件。
问题是,我正在查找包含“&”字符的路径名(不,它们不能被重命名),我需要一种自动转义"&“符号的方法,并使用转义的路径作为参数调用第二个批处理文件。

rem ProcessACL.cmd
echo %1
nhhxz33t

nhhxz33t1#

问题不在于转义,它似乎在第二个脚本中。
如果有一行像

echo %1

然后,它会扩展并失败:

echo You & me.acl

最好使用延迟扩展,如

setlocal EnableDelayedExpansion
set "var=%~1"
echo !var!

为了避免参数中出现感叹号!问题,第一个set应在DisableDelayedExpansion上下文中使用。

setlocal DisableDelayedExpansion
set "var=%~1"
setlocal EnableDelayedExpansion
echo !var!
rbpvctlc

rbpvctlc2#

您的for行应该是(请注意 *. acl)

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

ProcessACL.cmd可以使用%1访问传递给它的路径。

// ProcessACL.cmd
ECHO %1

变量% 1所包含的任何内容都是完全包含的。不需要转义符。转义符是批处理程序用来解释正在分析的字符的。

相关问题