2013-01-24 41 views
0

我輸入這一點,它不是在所有批處理腳本不設置變量重視

set ifpath=C:\Program Files\App 

if exist %ifpath% SET ppath=C:\Program Files ELSE SET ppath=C:\Program Files(x86) 

echo "%ppath%\App" 

簡單的工作,但我花了幾個小時試圖讓腳本工作。回聲時,它會保持缺席狀態。如果我刪除條件並簡單地將ppath設置爲路徑,則會顯示。

目標是檢測程序文件(x86)是否存在,然後在那裏安裝,否則只是程序文件。

回答

3

您有2個問題。

1)您的%ifpath%必須加引號,因爲它包含空格。如果沒有引號,IF EXIST會認爲名字會阻止第一個空格。

2)批解析器不知道SET命令的值何時結束。它將ELSE子句視爲值的一部分。這很容易用圓括號解決。

set "ifpath=C:\Program Files\App" 
if exist "%ifpath%" (SET ppath=C:\Program Files) ELSE SET ppath=C:\Program Files(x86) 
echo "%ppath%\App" 

讓我們假設您顛倒了測試並開始使用(x86)版本。簡單地添加圓括號不會解決問題,因爲解析器會認爲該值在(x86)的第1個圓括號處結束。這可以通過轉義來解決:

set "ifpath=C:\Program Files(x86)\App" 
if exist "%ifpath%" (SET ppath=C:\Program Files(x86^)) ELSE SET ppath=C:\Program Files 
echo "%ppath%\App" 

或者更好的辦法是使用引號:

set "ifpath=C:\Program Files(x86)\App" 
if exist "%ifpath%" (SET "ppath=C:\Program Files(x86)") ELSE SET "ppath=C:\Program Files" 
echo "%ppath%\App" 
1

你可以做這樣的事情:

if exist "%ifpath%" (call :PF) else (call :PFx86) 
:PF 
set "ppath=c:\Program Files" 
goto :EOF 
:PFx86 
set "ppath=c:\Program Files(x86)" 
goto :EOF 

有時我call之類的語句,當的iffor含糊不清的範圍混淆了我。我承認這是一種駭人而浪費的行爲,但對於在你的生活中使用創可貼並繼續前行非常有用。 :)

+0

謝謝!這樣可行!這是我需要的一切! :) – netrox

+0

@netrox - 不那麼快。你仍然有問題。你的IF語句可能總是返回FALSE。請參閱[我的答案](http://stackoverflow.com/a/14511321/1012053) – dbenham

+0

@dbenham - 好吧我添加了圓括號和引號。 :P – rojo

相關問題