.bat 文件中嵌套 if 中的 %errorlevel% 值错误

Ebr*_*imi 4 cmd batch-file errorlevel delayedvariableexpansion

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

first-program.exe
IF "%ERRORLEVEL%"=="0" (
    second-program.exe
    IF "%ERRORLEVEL%"=="0" (
        ECHO OK
    ) ELSE (
        ECHO NOK
    )
)
Run Code Online (Sandbox Code Playgroud)

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

小智 5

的两个实例都%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
Run Code Online (Sandbox Code Playgroud)