.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
我已经为第一个 运行 一个程序写了一个 .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