2011-10-13 11 views
8

Ho un file batch in cui eseguo la seguente linea di elencare il contenuto di un archivio:Cattura un errore all'interno di un file batch (7-zip)

"\Program Files\7-Zip\7z.exe" l "\Backup Google Docs.7z" 

L'archivio è intenzionalmente danneggiato.

display cmd.exe questo:

enter image description here

Come posso prendere questo errore nel mio codice?

risposta

19

Il codice di uscita di qualsiasi programma è memorizzato nella variabile %ERRORLEVEL% in uno script batch.

Dal manuale 7-zip:

7-Zip returns the following exit codes: 

Code Meaning 
0 No error 
1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed. 
2 Fatal error 
7 Command line error 
8 Not enough memory for operation 
255 User stopped the process 

Quindi: si può fare:

"\Program Files\7-Zip\7z.exe" l "\Backup Google Docs.7z" 
if errorlevel 255 goto:user_stopped_the_process 
if errorlevel 8 goto:not_enough_memory 
if errorlevel 7 goto:command_line_error 
if errorlevel 2 goto:fatal_error 
if errorlevel 1 goto:ok_warnings 

cautela, if errorlevel N controlla che %ERRORLEVEL% è maggiore o uguale a N, quindi li si dovrebbe mettere in ordine decrescente.

+0

Grazie. Funziona perfettamente! –

4

Verificare se ERRORLEVEL è impostato su 1 subito dopo la chiamata a 7z.exe e reagire in modo appropriato. ERRORLEVEL è il codice di uscita dall'ultimo programma eseguito. Un codice di uscita di 1 o più indica un errore mentre zero indica il successo. Il comando IF ERRORLEVEL controlla se l'uscita è maggiore o uguale all'argomento, quindi IF ERRORLEVEL verifica un livello di errore di uno o più.

Ecco un esempio:

"\Program Files\7-Zip\7z.exe" l "\Backup Google Docs.7z" > nul 
IF ERRORLEVEL 1 goto ziperror 
@echo 7-Zip worked 
goto :eof 

:ziperror 
@echo 7-Zip failed 
goto :eof