2012-12-19 35 views
3

爲什麼下面的命令空格不起作用工作沒有任何問題:「如果」帶括號是否有變

set PATH=C:\Program Files (x86)\Path\With whitespaces\ 
if defined APP_HOME set PATH=.;%PATH% 

但有錯誤「\路徑\有了在這個時候意外」,如果我使用「if」帶括號

set PATH=C:\Program Files (x86)\Path\With whitespaces\ 
if defined APP_HOME ( 
    set PATH=.;%PATH% 
) 

回答

5

)字符有時是特殊的,有時不是。

如果存在活動的(,則下一未加引用的,未轉義的)將關閉該塊。

如果沒有活動的(,那麼在命令參數中未加引號,未轉義的)將被簡單地視爲文字。

你的PATH變量包含)這是過早地關閉您的IF塊。在你的情況下,它可以通過在作業周圍添加引號來解決。

set PATH=C:\Program Files (x86)\Path\With whitespaces\ 
if defined APP_HOME ( 
    set "PATH=.;%PATH%" 
) 

但要小心。有時PATH包含已經引用的路徑。如果在PATH中已經有引號,那麼將引用括在引號中可能會中斷分配。

這裏是前面加上一個值路徑的萬無一失的方法,不管目前的定義是什麼。該代碼假定延遲擴展最初被禁用。

set PATH=C:\Program Files (x86)\Path\With whitespaces\ 
if defined temp (
    setlocal enableDelayedExpansion 
    for /f "eol=: delims=" %%P in ("!path!") do endlocal & set "PATH=.;%%P" 
) 
+0

編輯 - 增加了一個前置PATH路徑的簡單方法。 – dbenham

+0

謝謝!我根本沒有考慮過PATH中的父母。在我的情況下,如果沒有括號,最好使用。它工作沒有任何問題。 –