J'ai une fonction dans le script batch:retour errorlevel de la fonction de traitement par lots ne marche pas le travail
: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%
et im vérifiant son% code ERRORLEVEL% dans le cycle principal:
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
)
Mais le problème lorsque timeout 300s !CMD!
renvoie errorlevel 1 et renvoie exit /b %errorlevel%
en tant que 1 (./!_tool!.FAIL
étant créé et ainsi de suite) n'affecte pas l'IF du cycle principal et n'obtient echo %%t PASSED
de toute façon.
Impossible de faire fonctionner le code de retour à vérifier de cette façon ou quoi?
P.S. Certains < ...> code fonctionne correctement, donc je l'ai couper
peut-être, vous utilisez [extension retardée] (http://stackoverflow.com/a/30284028/2152082) aux mauvais endroits? – Stephan
@Stephan je l'utilise depuis le début du script (je ne sais pas vraiment quand je ne peux pas l'utiliser, seuls les cycles le demandent), comment peut-il gâcher des choses liées aux codes d'erreur? – mechanic
bien - vous utilisez '% errorlevel%' dans un bloc où vous devriez utiliser '! Errorlevel!' - et je ne vois aucune raison d'utiliser '! Cmd!' Au lieu de '% cmd%' (je ne dis pas, là _ is_ pas de raison, mais d'après ce que je peux voir, il n'y en a pas) – Stephan