2017-03-16 65 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未定義,表達式將保持不變。

那麼爲什麼有人這樣設計呢?我完全不知道。