Come controllare il codice di uscita dell'ultimo comando nel file batch?


Risposte:


78

Test per un codice di ritorno maggiore o uguale a 1:

if ERRORLEVEL 1 echo Error

o

if %ERRORLEVEL% GEQ 1 echo Error

o prova per un codice di ritorno uguale a 0:

if %ERRORLEVEL% EQU 0 echo OK

Puoi usare altri comandi come ad esempio GOTOdove mostro echo.


Ho provato il tuo codice. Ho ricevuto il seguente errore:0 was unexpected this time.
Misha Moroshko,

2
@Misha: potresti averlo provato con i segni di percentuale nel modo in cui l'ho pubblicato inizialmente. Provalo senza di loro o prova le altre versioni che ho aggiunto.
Dennis Williamson,

2
Trovati casi in cui %ERRORLEVEL%è 0 anche se si è verificato un errore. È successo durante il check %ERRORLEVEL%in di un file cmd. Provare start /waitnon ha funzionato. L'unica cosa che ha funzionato èif errorlevel 1 (...)
AlikElzin-Kilaka,

4
Attenzione, il livello di errore non è una variabile di ambiente . Ecco un buon riassunto delle insidie ​​e delle sottigliezze .
Nick Westgate,

Potrei suggerire di utilizzare NEQinvece di EQUsupportare il rilevamento di codici di ritorno negativi? Non ho idea se Windows XP lo fa, ma è una cosa su Windows moderno ...
binki

10

Funziona davvero quando hai: App1.exe chiama -> .bat che esegue -> app2.exe

App2 restituisce il livello di errore 1 ... ma devi prenderlo nel file .bat e ri-rilanciarlo in app1 ... altrimenti .bat mangia il livello di errore e app1 non lo sa mai.

Metodo:

In .bat:

app2.exe
if %ERRORLEVEL% GEQ 1 EXIT /B 1

Questo è un controllo dopo app2 per il livello di errore. Se> 0, allora .bat esce e imposta il livello di errore su 1 per l'app chiamante1.


4
potrebbe essere ancora meglio se restituissi lo stesso errore ad app1. non ho provato questo fuori, ma dovrebbe funzionare: if %ERRORLEVEL% GEQ 1 EXIT /B %ERRORLEVEL%.
Viktor Fonic,

2
Almeno in Windows,% ERRORLEVEL% può essere un numero negativo (ad es. Ho un programma che restituisce -1 in caso di errori). IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%potrebbe essere un'opzione migliore. Ma devi davvero sapere cosa restituisce il programma in caso di errori. Alcuni programmi restituiscono determinati codici diversi da zero per particolari tipi di successo.
Euro Micelli,

Se app2 è l'ultima cosa che esegui nel file bat, il codice di errore si propagherà.
AnrDaemon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.