这是一个简单但令人费解的问题。
对于未定义的Windows环境variables,例如abc
在命令提示符窗口中,ECHO [%abc%]导致[%abc%]
但在.CMDbatch fileECHO [%abc%]结果在[]
为什么区别? 我已经研究了ECHO命令,并且找不到任何关于这个的东西。 我担心这种细微差别可能会在哪里发生。
真的很好的问题! 混淆吧?
实际上有两个不同的解析器用于解析批处理脚本和命令行命令。
引用这个优秀的答案 :
BatchLineParser
– 批处理文件中的分析器,用于行或块
CmdLineParser
– 与BatchLineParser
,但直接在命令提示符下工作不同
关键的区别在于解析的第一阶段,特别是%var%
的扩展:
在BatchLineParser
如果var
不存在将被替换为BatchLineParser
,则在CmdLineParser
如果var
未定义,则表达式将保持不变。
那么为什么有人这样设计呢? 我完全不知道。