Comment puis-je quitter un fichier batch de l'intérieur d'un sous-programme?
Si j'utilise la commande EXIT, je reviens simplement à la ligne où j'ai appelé le sous-programme et l'exécution continue.
Voici un exemple:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Production:
Quitting...
Still here!
Mise à jour:
Ce n'est pas une bonne réponse, mais j'ai fini par faire quelque chose comme:
@echo off
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
ECHO You shouldn't see this!
GOTO END
:SUBROUTINE_WITH_ERROR
ECHO Simulating failure...
EXIT /B 1
:HANDLE_FAIL
ECHO FAILURE!
EXIT /B 1
:END
ECHO NORMAL EXIT!
EXIT /B 0
La déclaration à double tuyau de:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
est un raccourci pour:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
J'aimerais toujours savoir s'il existe un moyen de sortir directement d'un sous-programme plutôt que de devoir faire appel à l'appelant pour gérer la situation, mais cela fait au moins le travail.
Mise à jour # 2: Lorsque j'appelle un sous-programme à partir d'un autre sous-programme, appelé de la manière ci-dessus, j'appelle ainsi de l'intérieur des sous-programmes:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
De cette façon, l'erreur se propage de nouveau au "principal", pour ainsi dire. La partie principale du lot peut alors gérer l'erreur avec le gestionnaire d'erreurs GOTO: FAILURE
GOTO :EOF