13
这是一个简单但令人费解的问题。使用Windows未定义的环境变量?
对于未定义的Windows环境变量,ABC例如
在命令提示窗口ECHO [%ABC%]结果[%ABC%]
但是,在一个.CMD批处理文件ECHO [% abc%]结果为[]
为什么区别?我研究了ECHO命令并找不到任何关于此的内容。我担心这种细微差别可能适用于何处。
这是一个简单但令人费解的问题。使用Windows未定义的环境变量?
对于未定义的Windows环境变量,ABC例如
在命令提示窗口ECHO [%ABC%]结果[%ABC%]
但是,在一个.CMD批处理文件ECHO [% abc%]结果为[]
为什么区别?我研究了ECHO命令并找不到任何关于此的内容。我担心这种细微差别可能适用于何处。
真的很好的问题!混淆吧?
实际上有两个不同的解析器用于解析批处理脚本和命令行命令。
从 this excellent answer引用:
BatchLineParser
- 批处理文件的内部的解析器,对线路或块
CmdLineParser
- 像BatchLineParser
,而是直接在命令提示,工作不同
关键的区别在于解析的第一阶段,特别是%var%
的扩展:
BatchLineParser
如果var
不存在将被替换为无,则在CmdLineParser
如果var
未定义,表达式将保持不变。
那么为什么有人这样设计呢?我完全不知道。
如果你真的感兴趣,通过[这个答案](http://stackoverflow.com/a/4095133/6811411)工作,突出批处理和CMD线解释器的内部解析。 – LotPings
总结:它独立于'ECHO'命令,扩展规则与批处理文件上下文的cmd上下文不同 – jeb
您可以在某些方面充分利用这一点。例如,在命令提示符处:'for%a in(* .txt)do @set“var =%a”&call echo File:%var%'。请记住,var变量必须是未定义的才能使其工作... – Aacini