Come posso uscire da un file batch da una subroutine?
Se uso il comando EXIT, torno semplicemente alla riga in cui ho chiamato la subroutine e l'esecuzione continua.
Ecco un esempio:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Produzione:
Quitting...
Still here!
Aggiornare:
Questa non è una risposta corretta, ma ho finito per fare qualcosa del tipo:
@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
L'istruzione double pipe di:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
è una scorciatoia per:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Mi piacerebbe ancora sapere se c'è un modo per uscire direttamente da una subroutine piuttosto che dover fare in modo che CALLER gestisca la situazione, ma almeno questo fa il suo lavoro.
Aggiornamento n. 2: quando si chiama una subroutine da un'altra subroutine, chiamata nel modo sopra, chiamo dall'interno delle subroutine così:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
In questo modo, l'errore si propaga al "principale", per così dire. La parte principale del batch può quindi gestire l'errore con il gestore degli errori GOTO: FAILURE
GOTO :EOF