gpt4 book ai didi

windows - 为什么for循环中的单个%不能在命令行中解释为环境变量,而是在批处理文件中?

转载 作者:行者123 更新时间:2023-12-03 11:11:52 24 4
gpt4 key购买 nike

在此question上,此问题仍未得到解答:

Is there an explanation for why I can get away with using just one percent sign in a FOR loop, when executed directly from a command prompt, and not from a batch file? I know about the DOS heritage, but we can use variables from a command line now.



您可以在命令行上使用环境变量,为什么在命令行上也无法将类似 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命令成功。第二次定义奇数变量,并且扩展导致无效命令。

命令行模式不会将 undefined variable 扩展为空,而是保留初始的 %,然后查找其他变量以随后扩展。

例如,如果未定义X,且Y = 1,则 %X%Y%将在命令行上扩展为 %X1。但是在批处理文件中,它将扩展为 Y

通过 https://stackoverflow.com/a/7970912/1012053上发布的规则可以完全预测结果,但是可能很难遵循。

关于windows - 为什么for循环中的单个%不能在命令行中解释为环境变量,而是在批处理文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61985283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com