我正在運行更新一些變量的批處理文件,特別是%PATH%。我的環境有一個已知的錯誤,其中引用了%PATH%中的目錄,即批處理腳本在塊中處理變量的方式不同嗎?
PATH=c:\windows;...;"c:\program files\foo"\bin;c:\program files\...
我有一個附加到PATH的腳本。當我做一個IF
塊中,我得到一個錯誤,e.g:
IF "1"=="1" (
SET "PATH=%PATH%;c:\foo"
)
給出了錯誤
\微軟在這個時候意外。
其中\Microsoft
顯然是來自%PATH%中某個目錄的片段。
如果SET不在條件塊內,我不會收到錯誤。爲什麼是這樣?
編輯:這似乎與PATH還包含括號的事實有關。這裏的問題的一個更好的例子:
C:\temp>SET "FOO=C:\Program Files (x86)\;foo"
C:\temp>ECHO %FOO%
C:\Program Files (x86)\;foo
C:\temp>IF "1"=="1" (ECHO %FOO%)
\ was unexpected at this time.
C:\temp>IF "1"=="1" ECHO %FOO%
C:\Program Files (x86)\;foo
所以我的問題是真的,爲什麼它打破,如果它在括號分隔塊?
保持使用'set「varName = varValue」'帶雙引號的語法模式(一般轉義規則);如果'varValue'包含需要轉義的字符,則使用帶引號的'「%varName%」'(或在某些情況下延遲擴展'!varName!'...) – JosefZ
正確。如果其中包含引號,則不會在引號之外使用引號。 – ManoDestra
但是你不能控制PATH中的內容。可能有值與不帶引號的值的組合。 – dbenham