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

时间:2010-11-03 13:52:10

标签: windows batch-file escaping

我意识到您可以使用帽子字符

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

e.g。

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

2 个答案:

答案 0 :(得分:7)

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

如果有像

这样的行
echo %1

然后它会扩展并失败:

echo You & me.acl

最好使用延迟扩展,如

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

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

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

答案 1 :(得分:0)

你的换行应该是(注意* .acl)

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

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

// ProcessACL.cmd
ECHO %1

变量%1包含的内容完全包含在内。没有必要逃脱。转义是批处理器解释它正在解析的字符。