简体   繁体   中英

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:

在此输入图像描述

How can I catch this error in my code?

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM