在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!
答
您的线应为(注意*的.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
带“&”的文件现在可以使用,但文件带有“!”不再起作用 – ariel 2017-09-19 23:49:17
@ariel谢谢你的提示,我添加了这一点的解决方案太 – jeb 2017-09-20 05:55:58