2012-10-11 103 views
0

批處理腳本中的以下簡單步驟給我帶來了錯誤。它說如果批處理文件中的語句給出錯誤

'else' is not recognized as an internal or external command, 
operable program or batch file. 
) was unexpected at this time. 

有些人可以幫忙嗎?

set var_machine64 = 0 

if exist "C:\Program Files (x86)" (set var_machine64 = 1) 

if !var_machine64! == 1 (
    If exist "C:\Program Files (x86)\Microsoft" (
     echo Microsoft folder not available 
     goto End)) 
else (
     If exist "C:\Program Files \Microsoft" (
     echo Microsoft folder not available 
     goto End)) 

:End 
Exit 

回答

2

else必須是在哪裏關閉最後一個塊中的同一行,即)

if !var_machine64! == 1 (
    If exist "C:\Program Files (x86)\Microsoft" (
     echo Microsoft folder not available 
     goto End 
    ) 
) else (
    If exist "C:\Program Files\Microsoft" (
     echo Microsoft folder not available 
     goto End 
    ) 
) 

我把固定縮進的自由和文件夾名稱作爲一個多餘的空間好。

這可以修復您的語法錯誤的直接問題,但無法幫助,因爲批處理文件無法正常工作。您不能在set語句的=周圍使用任何空格,因爲否則您將創建一個變量,該變量以具有以1開頭的值的空格結束。所以:

set var_machine64=0 
if exist "C:\Program Files (x86)" (set var_machine64=1) 

將使事情工作更好。另請注意,要使用延遲擴展,您需要先在批處理文件中使用setlocal enabledelayedexpansion,或者使用/v:on開始cmd。我只是猜測你沒有顯示整個文件(這是可以的,但考慮到在這個短片段中的錯誤率,我會說你應該再次檢查一切)。

隨機旁註:將exit包含在批處理文件中並不好,因爲從交互式會話運行時它會將其殺死。如果您只想退出批處理文件(而不是整個命令處理器),請使用exit /bgoto :eof

+0

感謝喬伊的答案。這對我很有幫助。 –

+0

_ ** ELSE ** **必須與** IF **的結尾處於同一行)「)... ...這些愚蠢的空白規則每次都會讓我感到厭倦。我希望這是更廣泛的知道/記錄/問及回答,因爲它很難谷歌。 – mmseng