首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环开关处理

循环开关处理
EN

Stack Overflow用户
提问于 2014-01-20 01:52:37
回答 2查看 105关注 0票数 2

我很好奇为什么在没有空格的情况下直接按照set命令进行切换,就像有空格一样工作;

set /a i+=1,与set/a i+=1,甚至set/ai+=1一样工作。

然而--相同的逻辑不适用于for命令--以下内容将无法工作:

代码语言:javascript
运行
复制
for/L %a in (1,1,2) do echo %a

但是,它会产生错误:

代码语言:javascript
运行
复制
'for' is not recognized as an internal or external command,
operable program or batch file.

而不是我所期望的'for/L' is not recognized ...

我的问题是,当它清楚地区分开关和命令时,为什么它不接受语法,然后就不能工作-而且,为什么它会产生上面看到的错误呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-20 04:55:09

大多数内部命令使用一致的解析器,它们通常接受表单commandName/option。但是FOR和IF命令比较复杂,并且有特殊的解析规则。FOR/L ...IF/I ...不起作用这一事实证明,它们实际上有自己的特殊解析规则。jeb已经对批处理解析器的工作方式做了很多研究,但我从未见过他对FOR和IF工作方式的完整分析。

票数 2
EN

Stack Overflow用户

发布于 2014-01-20 04:13:17

这两个命令的词法解析是不同的:一个使用开关,另一个没有。

如果不咨询实现windows批处理脚本语言的程序员,我们就不能解释为什么会这样。

我认为可以公平地说,尽管从语言的总体质量来看,我对一个合理的答案并不抱太大的希望。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21225077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档