如果批处理文件中的语句出错

时间:2012-10-11 08:32:04

标签: if-statement batch-file

批处理脚本中的以下简单步骤给了我错误。它说

'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

1 个答案:

答案 0 :(得分: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之前使用cmd,或者使用/v:on启动exit。我只是猜你没有显示整个文件(这没关系,但考虑到这个简短的片段中的错误率,我会说你应该仔细检查其他所有内容)。

随机附注:在批处理文件中包含exit /b并不好,因为从交互式会话中运行它会将其终止。如果您只想退出批处理文件(而不是整个命令处理器),请使用goto :eof或{{1}}。