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