【发布时间】:2013-12-16 17:34:38
【问题描述】:
我发现了一个我似乎无法解释的批处理脚本的特殊问题。也许这只是因为我对批处理的工作原理不够了解,但这里有一个示例批处理文件(test.bat):
@echo off
FOR /F "tokens=1*" %%i in ("%*") DO (
echo %%j
)
如果我这样称呼它:
test.bat ab a,b "a,b"
我得到这个作为我的输出:
a,b "a b"
为什么去掉第二个逗号?如果我像这样转义逗号:
test.bat ab a,b "a^,b"
我得到正确的输出:
a,b "a,b"
它几乎就像','被for循环视为分隔符,但是当我查看FOR /?时,唯一的默认分隔符是空格。逗号未列为分隔符。如果我特别声明 delim 是一个空格,我仍然会得到这种行为。如果我转义引号,我仍然会得到这种行为。无论如何,如果逗号是一个分隔符,第一个逗号也应该被去掉,对吧?奇怪的是,如果你尝试在 for 循环中使用“usebackq”,你会得到完全相反的结果。第一个逗号被去掉,第二个逗号被保留:
a b "a,b"
为什么我必须转义引号内的所有逗号才能使其正常工作?是否有一些我缺少的 whindows 规则,或者它只是 Windows 批处理脚本中的一个错误?
【问题讨论】:
-
您的代码报错 C:\Temp>test.bat ab a,b "a,b" a,b "a b" 系统找不到文件ê♠。
标签: windows batch-file for-loop