关于这个问题,这个问题仍然没有答案:
有没有解释为什么我可以在 FOR 循环中仅使用 1% 的登录,当直接从命令提示符而不是从批处理文件执行时?我知道 DOS 遗产,但我们现在可以从命令行使用变量。
您可以在命令行上使用环境变量,那么为什么FOR /L %A in (1,1,5) Do Echo %A
之类的东西在命令行上也没有解释为%A in (1,1,5) Do Echo %
环境变量呢?
我不知道命令行解析与批处理模式解析如此不同的原因。可能与旧DOS行为的向后兼容性有关。
但是命令行确实尝试将%A in (1,1,5) Do Echo %
视为变量!
D:test>FOR /L %A in (1,1,5) Do Echo %A
D:test>Echo 1
1
D:test>Echo 2
2
D:test>Echo 3
3
D:test>Echo 4
4
D:test>Echo 5
5
D:test>set "A in (1,1,5) Do Echo =XXXX"
D:test>FOR /L %A in (1,1,5) Do Echo %A
XXXXA was unexpected at this time.
在第一个实例中,未定义奇数变量,因此 FOR 命令成功。第二次定义奇数变量时,展开会导致命令无效。
命令行模式不会将未定义的变量扩展为空,而是保留初始%
,然后查找其他变量进行扩展。
例如,如果未定义 X,并且 Y=1,则%X%Y%
将在命令行上展开为%X1
。但是在批处理文件中,它将扩展到Y
.
结果完全可以通过 https://stackoverflow.com/a/7970912/1012053 发布的规则来预测,但可能很难遵循。