我很好奇为什么直接在没有空格的set命令之后切换,就像有空格一样工作;
set /a i+=1
,与set/a i+=1
的工作方式相同,甚至set/ai+=1
然而 - 相同的逻辑不适用于for命令 - 以下内容不起作用:
for/L %a in (1,1,2) do echo %a
然而它会产生错误:
'for' is not recognized as an internal or external command,
operable program or batch file.
而不是我期望的'for/L' is not recognized ...
我的问题是,当它明确区分开关与命令时,为什么它不接受语法,然后不能工作 - 此外,为什么它会产生上面看到的错误?
答案 0 :(得分:2)
大多数内部命令使用一致的解析器,它们通常接受commandName/option
形式。但是FOR和IF命令更复杂,并且具有特殊的解析规则。 FOR/L ...
和IF/I ...
不起作用的事实是他们实际上有自己特殊解析规则的一些证据。 jeb已经对批处理解析器的工作原理做了很多研究,但我从未见过他对FOR和IF如何工作的完整分析。
答案 1 :(得分:0)
两个命令的词法解析是不同的:一个接受开关,另一个不接受。
如果没有咨询实现Windows批处理脚本语言的程序员,我们就不能说为什么会这样。
我认为可以公平地说,从一般语言的质量来看,我不会对理性答案抱太大希望。