2012-10-11 73 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