从批处理函数返回错误级别不起作用
returning errorlevel from batch function doesnt work
我在批处理脚本中有一些功能:
:run
set "CMD=%*"
<...>
timeout 300s !CMD!
if %errorlevel% equ 0 (
echo !CMD! >> ./!_tool!.OK
) else (
echo !CMD! >> ./!_tool!.FAIL
echo exitcode= %errorlevel% >> ./FAIL
echo ===STOP=== %date% %time%
exit /b %errorlevel%
)
exit /b %errorlevel%
并且我在主循环中检查其 %errorlevel% 代码:
for /f "tokens=*" %%t in (%TEST_LIST%) do (
<...>
call :run %TOOL% -O0 -S %REPO_PATH%\%%t
if %errorlevel% equ 0 (
echo %%t PASSED
) else (
echo %%t FAILED
)
但是当 timeout 300s !CMD!
return 错误级别为 1 并且 returning exit /b %errorlevel%
为 1 时的问题(./!_tool!.FAIL
被创建等等)没有影响主循环的 IF 并且无论如何我都会得到 echo %%t PASSED
。
无法运行 return 代码以这种方式检查或什么?
P.S。一些 <...> 代码工作正常,所以我把它删掉了
感谢@Stephan,我发现了我的问题——我应该在我的 FOR 循环中使用 !errorlevel!
而不是 %errorlevel%
,因为它应该在每次迭代时刷新
我在批处理脚本中有一些功能:
:run
set "CMD=%*"
<...>
timeout 300s !CMD!
if %errorlevel% equ 0 (
echo !CMD! >> ./!_tool!.OK
) else (
echo !CMD! >> ./!_tool!.FAIL
echo exitcode= %errorlevel% >> ./FAIL
echo ===STOP=== %date% %time%
exit /b %errorlevel%
)
exit /b %errorlevel%
并且我在主循环中检查其 %errorlevel% 代码:
for /f "tokens=*" %%t in (%TEST_LIST%) do (
<...>
call :run %TOOL% -O0 -S %REPO_PATH%\%%t
if %errorlevel% equ 0 (
echo %%t PASSED
) else (
echo %%t FAILED
)
但是当 timeout 300s !CMD!
return 错误级别为 1 并且 returning exit /b %errorlevel%
为 1 时的问题(./!_tool!.FAIL
被创建等等)没有影响主循环的 IF 并且无论如何我都会得到 echo %%t PASSED
。
无法运行 return 代码以这种方式检查或什么?
P.S。一些 <...> 代码工作正常,所以我把它删掉了
感谢@Stephan,我发现了我的问题——我应该在我的 FOR 循环中使用 !errorlevel!
而不是 %errorlevel%
,因为它应该在每次迭代时刷新