在.bat文件

时间:2018-05-15 10:55:09

标签: batch-file cmd errorlevel delayedvariableexpansion

我已经写了一个.bat文件来首先运行一个程序,如果它正确完成我运行另一个程序并检查它的返回值。

first-program.exe
IF "%ERRORLEVEL%"=="0" (
    second-program.exe
    IF "%ERRORLEVEL%"=="0" (
        ECHO OK
    ) ELSE (
        ECHO NOK
    )
)

但是,第二个%ERRORLEVEL%始终等于第一个,它不会设置为second-program.exe的返回值。

1 个答案:

答案 0 :(得分:1)

%ERRORLEVEL%的两个实例都位于相同的代码块中,因此两者在第一个实例更新时获取其值。考虑使用enabledelayedexpansion启用变量的延迟扩展,并将%ERRORLEVEL%替换为!ERRORLEVEL!以单独更新每个实例。例如:

@echo off
setlocal enabledelayedexpansion
first-program.exe
IF "!ERRORLEVEL!"=="0" (
    second-program.exe
    IF "!ERRORLEVEL!"=="0" (
        ECHO OK
    ) ELSE (
        ECHO NOK
    )
)
endlocal