У меня есть функция в пакетном скрипте:
: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!
возвращает уровень ошибки 1 и возвращает exit /b %errorlevel%
как 1 (./!_tool!.FAIL
создается и т. д.), не влияет на IF основного цикла, и я все равно получаю echo %%t PASSED
.
Нельзя проверить код возврата функции таким образом или как?
P.S. Некоторый код ‹...> работает правильно, поэтому я его вырезал
%errorlevel%
внутри блока, где вы должны использовать!errorlevel!
- и я не вижу причин использовать!cmd!
вместо%cmd%
(я не говорю, что _ нет_ причин, но, насколько я вижу, их нет) - person Stephan   schedule 18.05.2016:run
? Должен ли я использовать ВСЕ переменные в любом блоке (), как !this! ? - person mechanic   schedule 19.05.2016