使用Windows未定义的环境variables?

这是一个简单但令人费解的问题。

对于未定义的Windows环境variables,例如abc

在命令提示符窗口中,ECHO [%abc%]导致[%abc%]

但在.CMDbatch fileECHO [%abc%]结果在[]

为什么区别? 我已经研究了ECHO命令,并且找不到任何关于这个的东西。 我担心这种细微差别可能会在哪里发生。

真的很好的问题! 混淆吧?

实际上有两个不同的解析器用于解析批处理脚本和命令行命令。

引用这个优秀的答案 :

BatchLineParser – 批处理文件中的分析器,用于行或块

CmdLineParser – 与BatchLineParser ,但直接在命令提示符下工作不同

关键的区别在于解析的第一阶段,特别是%var%的扩展:

BatchLineParser如果var不存在将被替换为BatchLineParser ,则在CmdLineParser如果var未定义,则表达式将保持不变。

那么为什么有人这样设计呢? 我完全不知道。