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

问题描述:

我知道您可以使用帽子字符在批处理文件中跳过&符号在Windows批处理文件中转义&符号

例如,

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 

的问题不在于转义,这似乎是在第二个脚本。

如果有喜欢

echo %1 

一条线然后是扩张和失败:

echo You & me.acl 

最好使用延迟扩展像

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

要还避免带感叹号的问题在参数点!,第一set应使用在DisabledDelayedExpansion上下文中。

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

带“&”的文件现在可以使用,但文件带有“!”不再起作用 – ariel 2017-09-19 23:49:17

+0

@ariel谢谢你的提示,我添加了这一点的解决方案太 – jeb 2017-09-20 05:55:58

您的线应为(注意*的.acl)

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

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

// ProcessACL.cmd 
ECHO %1 

无论变量%1包含什么,都被完全包含。没有必要逃脱。转义是批处理器解释正在分析的字符。

+1

感谢您的答复。在“的.acl”是专门找了一个名为“的.acl”,而不是所有的.acl的扩展名的文件的文件。我已经在ProcessACL.cmd文件中使用%1,这会产生错误“:在这个时候意外”,当%1包含了包括符号的路径。 – Bryan 2010-11-03 16:06:37