Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 499
GG. Avatar asked Oct 13 '11 09:10

GG.


2 Answers

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.

like image 82
Benoit Avatar answered Oct 31 '22 06:10

Benoit


Check if the ERRORLEVEL is set to 1 just after the call to 7z.exe and react appropriately. The ERRORLEVEL is the exit code from the last program that was run. An exit code of 1 or more indicates an error while zero indicates success. The IF ERRORLEVEL command checks if the exit is greater than or equal to the argument so IF ERRORLEVEL checks for an error level of one or more.

Here is an example:

"\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
like image 25
Josh Avatar answered Oct 31 '22 06:10

Josh