2011-10-13 8 views
8

Tengo un archivo por lotes en el que ejecuto la siguiente línea a listar el contenido de un archivo:Catch un error dentro de un archivo por lotes (7-zip)

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

El archivo está dañado intencionalmente.

pantallas cmd.exe esto:

enter image description here

¿Cómo puedo encontrar este error en mi código?

Respuesta

19

El código de salida de cualquier programa se almacena en la variable %ERRORLEVEL% en un script por lotes.

Desde el manual de 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 

Por lo tanto: que puede hacer:

"\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 cheques que %ERRORLEVEL% es mayor o igual que N, por lo tanto, usted debe ponerlos en orden descendiente.

+0

Gracias. Eso funciona perfectamente! –

4

Compruebe si ERRORLEVEL está configurado en 1 justo después de la llamada a 7z.exe y reacciona de forma adecuada. ERRORLEVEL es el código de salida del último programa que se ejecutó. Un código de salida de 1 o más indica un error, mientras que cero indica éxito. El comando IF ERRORLEVEL comprueba si la salida es mayor o igual que el argumento, de modo que SI ERRORLEVEL comprueba si hay un nivel de error de uno o más.

Aquí se muestra un ejemplo:

"\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 
Cuestiones relacionadas