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.