从批处理函数返回错误级别不起作用

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%,因为它应该在每次迭代时刷新