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

时间:2017-03-16 09:21:46

标签: windows batch-file variables cmd

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

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

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

但是在.CMD批处理文件中,ECHO [%abc%]会产生[]

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

1 个答案:

答案 0 :(得分:1)

真的好问题!困惑吧?

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

引自this excellent answer

  

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

     

CmdLineParser - 与BatchLineParser一样,但直接在命令提示符下,工作方式不同

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

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

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