使用Windows未定义的环境变量?

Lar*_*811 13 windows variables cmd batch-file

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

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

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

但在.CMD批处理文件中,ECHO [%abc%]导致[]

为什么不同?我研究了ECHO命令,但却找不到任何相关信息.我担心这个微妙差异可能适用于何处.

Dáv*_*nár 1

真是个好问题!令人困惑吧?

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

引用这个优秀的答案

BatchLineParser- 批处理文件内的解析器,用于行或块

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

主要区别在于解析的第一阶段,特别是扩展%var%

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

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