2017-03-16 48 views
13

这是一个简单但令人费解的问题。使用Windows未定义的环境变量?

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

在命令提示窗口ECHO [%ABC%]结果[%ABC%]

但是,在一个.CMD批处理文件ECHO [% abc%]结果为[]

为什么区别?我研究了ECHO命令并找不到任何关于此的内容。我担心这种细微差别可能适用于何处。

+7

如果你真的感兴趣,通过[这个答案](http://stackoverflow.com/a/4095133/6811411)工作,突出批处理和CMD线解释器的内部解析。 – LotPings

+6

总结:它独立于'ECHO'命令,扩展规则与批处理文件上下文的cmd上下文不同 – jeb

+2

您可以在某些方面充分利用这一点。例如,在命令提示符处:'for%a in(* .txt)do @set“var =%a”&call echo File:%var%'。请记住,var变量必须是未定义的才能使其工作... – Aacini

回答

1

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

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

this excellent answer

引用:

BatchLineParser - 批处理文件的内部的解析器,对线路或块

CmdLineParser - 像BatchLineParser,而是直接在命令提示,工作不同

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

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

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