我很好奇为什么在没有空格的情况下直接按照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 ...
我的问题是,当它清楚地区分开关和命令时,为什么它不接受语法,然后就不能工作-而且,为什么它会产生上面看到的错误呢?
发布于 2014-01-20 04:55:09
大多数内部命令使用一致的解析器,它们通常接受表单commandName/option
。但是FOR和IF命令比较复杂,并且有特殊的解析规则。FOR/L ...
和IF/I ...
不起作用这一事实证明,它们实际上有自己的特殊解析规则。jeb已经对批处理解析器的工作方式做了很多研究,但我从未见过他对FOR和IF工作方式的完整分析。
发布于 2014-01-20 04:13:17
这两个命令的词法解析是不同的:一个使用开关,另一个没有。
如果不咨询实现windows批处理脚本语言的程序员,我们就不能解释为什么会这样。
我认为可以公平地说,尽管从语言的总体质量来看,我对一个合理的答案并不抱太大的希望。
https://stackoverflow.com/questions/21225077
复制相似问题