Поймай ошибку внутри командного файла (7-zip) - PullRequest
7 голосов
/ 13 октября 2011

У меня есть командный файл, в котором я выполняю следующую строку для просмотра содержимого архива:

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

Архив намеренно поврежден.

cmd.exe отображает это:

enter image description here

Как я могу поймать эту ошибку в моем коде?

Ответы [ 2 ]

19 голосов
/ 13 октября 2011

Код завершения любой программы сохраняется в переменной %ERRORLEVEL% в пакетном скрипте.

Из руководства по 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 

Итак: вы можете сделать:

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

Осторожно, if errorlevel N проверяет, что %ERRORLEVEL% больше или равно N, поэтому вы должны поместить их в порядке убывания.

4 голосов
/ 13 октября 2011

Проверьте, установлено ли значение ERRORLEVEL на 1 сразу после вызова 7z.exe, и отреагируйте соответствующим образом. ОШИБКА - это код выхода из последней запущенной программы. Код выхода 1 или более указывает на ошибку, а ноль указывает на успех. Команда IF ERRORLEVEL проверяет, является ли выход большим или равным аргументу, поэтому IF ERRORLEVEL проверяет уровень ошибки один или более.

Вот пример:

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