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

wrong value of %errorlevel% in nested if in .bat file

我已经为第一个 运行 一个程序写了一个 .bat 文件,如果它正确完成我 运行 另一个程序并检查它的 return 值。

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

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

%ERRORLEVEL% 的两个实例都在同一代码块中,因此 both 在第一个实例更新时获得它们的值。考虑使用 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