Catch an error inside a batch file (7-zip)

GG. picture GG. · Oct 13, 2011 · Viewed 20.9k times · Source

I have a batch file in which I execute the following line to list the contents of an archive:

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

The archive is intentionally corrupted.

cmd.exe displays this:

enter image description here

How can I catch this error in my code?

Answer

Benoit picture Benoit · Oct 13, 2011

Any program's exit code is stored in the %ERRORLEVEL% variable in a batch script.

From the 7-zip manual:

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 

So: you can do:

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

Caution, if errorlevel N checks that %ERRORLEVEL% is greater or equal than N, therefore you should put them in descending order.