这是一个简单但令人费解的问题。
对于未定义的Windows环境变量,例如abc
在命令提示符窗口中,ECHO [%abc%]导致[%abc%]
但是在.CMD批处理文件中,ECHO [%abc%]会产生[]
为何与众不同?我研究了ECHO命令,但却找不到任何相关信息。我担心这个微妙差异可能适用于何处。
答案 0 :(得分:1)
真的好问题!困惑吧?
实际上有两个不同的解析器用于解析批处理脚本和命令行命令。
BatchLineParser
- 批处理文件中的解析器,用于行或块
CmdLineParser
- 与BatchLineParser
一样,但直接在命令提示符下,工作方式不同
关键区别在于解析的第一阶段,特别是%var%
的扩展:
BatchLineParser
如果var
不存在将被替换为空,CmdLineParser
如果var
未定义,则表达式将保持不变。
那么为什么有人这样设计呢?我完全不知道。