“)此时出人意料。”在BATCH中运行嵌套IF

时间:2011-10-21 06:07:52

标签: batch-file if-statement

不确定为什么会这样。试着看起来......我认为看起来很好。

IF not (%5) == () (
    call %antPath% -f %buildFile% runSoapUI -DserviceName=%1 -DoperationName=%2 -DinputData=%3 -DlogID=%4 -DtestType=%5
) ELSE (
    IF not (%4) == () (
        call %antPath% -f %buildFile% runSoapUI -DserviceName=%1 -DoperationName=%2 -DinputData=%3 -DlogID=%4 -DtestType=FILE
    ) ELSE (
        call %antPath% -f %buildFile% help
    )
)

1 个答案:

答案 0 :(得分:2)

就像Mat所说,在if语句中使用括号是个坏主意。 更好的是使用引号,因为它们可以防止许多特殊字符出现问题,例如%n

内容中的空格<>&|()

如果)中有任何变量,您的调用语句也会出现问题。

你可以通过延迟扩展解决这个问题。

setlocal EnableDelayedExpansion
IF not "%5" == "" (
    call !antPath! -f !buildFile! runSoapUI -DserviceName=%1 -DoperationName=%2 -DinputData=%3 -DlogID=%4 -DtestType=%5
) ELSE (
    IF not "%4" == "" (
        call !antPath! -f !buildFile! runSoapUI -DserviceName=%1 -DoperationName=%2 -DinputData=%3 -DlogID=%4 -DtestType=FILE
    ) ELSE (
        call !antPath! -f !buildFile! help
    )
)