Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.58/424: Рейтинг темы: голосов - 424, средняя оценка - 4.58
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
1

Коды возврата ошибок (расшифровки ErrorLevel)*

20.12.2012, 22:21. Просмотров 77888. Ответов 32

Коды возврата ошибок (встроенных команд и других программ)

Как получить код возврата

Для новичков - очень подробно расписано в теме: Выполнение действия, если операция копирования прошла неуспешно

Порядок получения код возврата
Запускаем приложение, следующей командой проверяем переменную %ErrorLevel%. Есть еще такие варианты написания.
Например,
Bash
1
2
3
4
::Упаковать все документы
rar.exe a arch.rar *.doc
::Вывести на экран код возврата
Echo %ErrorLevel%
Не забываем, что внутри скобок и под циклом ErrorLevel можно получить только включив отложенное расширение переменных среды:
Bash
1
2
3
4
5
Setlocal EnableDelayedExpansion
(
  copy /y *.doc d:\*.*
  if !errorlevel!==0 Echo Operation Successful
)
В языках высокого уровня код возврата можно получить API функцией:

GetExitCodeProcess
GetExitCodeThread

А задать код при выходе из программы с помощью функций:

ExitProcess
ExitThread

либо указав число, которое вернет основная функция,
например main в C++:
Код
return 5;
или в AutoIt:
Код
Exit 5


Как сгенерировать код возврата


В Batch:
1. Выполнив команду, которая возвращает Errorlevel, например: cmd /c exit /b 5
где 5 - произвольный код в пределах от -2147483648 до +2147483647

В языках высокого уровня код возврата можно сгенерировать API функцией:
ExitProcess - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
при этом приложение будет завершено.

Дополнение от Alterex на счет set ErrorLevel=



Общепринятые коды возврата консольных команд DWORD-коды
Преобразование текста ошибок в пользовательский код возврата.

Перечень ErrorLevel в этой теме:

WinRAR (rar.exe)
cmd.exe
copy
xcopy

RoboCopy
ARJ32/Console
7-Zip
msiexec, WMIC
WGET
ping
Windows Scripting Host
FC
Ошибки, возвращаемые FTP-сервером
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2012, 22:21
Ответы с готовыми решениями:

Параноя возврата ошибок. Стоит ли проверять каждое действие? Когда останавливаться?
Если... если..если.. Партянка будет длинной.. Например, через 10 лет села...

Сгенерировать коды ошибок CMD
Добрый, помогите плиз сгенерировать сообщения об ошибках в командной строке CMD...

Коды ошибок Windows
Вам приходилось встречать при работе на компьютере раздражающие всплывающие...

Проверка %ERRORLEVEL%
Добрый день! Помогите пожалуйста. После запуска команды необходимо сделать...

%ERRORLEVEL% в Windows Embedded CE 6.0
@echo off set count=0 :begin set /A count=count+1 ping localhost -n 10 ...

32
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
08.06.2013, 18:51  [ТС] 21
Хорошая тема с простыми примерами, как пользоваться кодами возврата ошибок и сокращенными записями || и &&

Выполнение действия, если операция копирования прошла неуспешно
0
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
31.07.2013, 01:11  [ТС] 22
Многие родные Microsoft программы, такие как msiexec-установщик, WMIC... используют коды возврата ошибок API-функций.

MSDN: API System Error Codes

Код из скрина:
Bash
1
wmic /NameSpace:\\root\default Class StdRegProv Call CreateKey hDefKey="&H80000002" sSubKeyName="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\fuc_avers"
0
Миниатюры
Коды возврата ошибок (расшифровки ErrorLevel)*  
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
22.09.2013, 23:46  [ТС] 23
WGET
Утилита для скачивания с HTTP, HTTPS, FTP файлов и целых сайтов.

Код возврата
Описание
0No problems occurred.
1Generic error code.
2Parse error—for instance, when parsing command-line options, the ‘.wgetrc’ or ‘.netrc’...
3File I/O error.
4Network failure.
5SSL verification failure.
6Username/password authentication failure.
7Protocol errors.
8Server issued an error response.

With the exceptions of 0 and 1, the lower-numbered exit codes take precedence over higher-numbered ones, when multiple types of errors are encountered.
0
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
16.01.2014, 03:51  [ТС] 24
Как MS-DOS сообщала о кодах ошибок?

Важность обратной совместимости кодов ошибок
1
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
26.03.2014, 01:22  [ТС] 25
Использование ErrorLevel в Win9x и MS-DOS.
2
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
01.05.2014, 21:35  [ТС] 26
ping - коды ошибок (MSDN)
3
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
13.07.2014, 01:37  [ТС] 27
Все коды ошибок Windows Scripting Host

(с примерами и пояснениями для разрешения проблем).

Перечень ошибок


Categories of VBScript 800xxxxx error codes
  • Code 80005xxx - ADSI errors
  • Code 8007xxxx - Operating System error e.g. Windows Server
  • Code 800Axxxx - Syntax errors
  • Sundry Errors

Code 80005xxx - ADSI errors
Errors beginning with 80005xxx point to an ADSI error in your VBScript. While the message box calls them ADSI, I think of them as LDAP errors. For example, suppose that you are scripting a user's properties and you type givename instead of givenName (two ns), that mistake in the ADSI / LDAP name would generate an 80005xxx error.

Code 80005000 Object Required
Code 80005001 An unknown ADSI domain object was requested
Code 80005002 An unknown ADSI user object was requested
Code 80005003 An unknown ADSI computer object was requested
Code 8000500D The directory property cannot be found

Sundry Errors - Including WMI and MSN
Code 8002009 Error Setting Default Printer
Code 80020005 Type mismatch
Code 8002801c DllRegisterServer in COM failed
Code 800401E4 Syntax error
Code 80040E14 One or more errors occurred during processing of command
Code 80040E37 Table does not exist
Code 80041001 Call Failed
Code 80041002 Object not Found
Code 80041006 Insufficient Memory
Code 80041010 Spelling mistake in a keyword
Code 80041013 Provider not Found
Code 80041014 Component Error
Code 80041021 Syntax error in WMI winmgmts \\
Code 80048820 MSN Messenger server problem
Code 80048821 MSN Messenger email username problem
Code 80048823 MSN Messenger password
Code 8004888D MSN Service is temporarily unavailable
Code 81000306 MSN Messenger server down?
Code 81000314 MSN Messenger server down?

Code 8007xxxx - Operating System Error e.g. Windows 7 / Server 2003 / 8
If your error begins with 8007xxxx then look for an factor outside VBScript. For instance, check the spelling of the name of your share or printer. Another possibility is that the server named in the script, is simply down or otherwise unavailable.

Code 80070005 Access denied
Code 80070035 The network PATH cannot be found
Code 80070043 The network NAME cannot be found
Code 80070055 The local device name is already in use
Code 8007007B The filename, directory or volume is incorrect
Code 800704B0 The specified device name is invalid
Code 800704B2 An attempt was made to remember a device .......
Code 800704B3 No network provider accepted the given network path
Code 800704CA This network connection does not exist
Code 800704C3 Multiple Connections to a server or shared resource...
Code 800704CF The network location cannot be reached
Code 8007052E Logon Failure: unknown user name or bad password
Code 80070571 The media is corrupt
Code 800706B5 The Interface is Unknown
Code 800706BA The RPC server is unavailable
Code 80070709 The Printer name is invalid
Code 80070961 This network connection has files open or requests pending
Code 80071329 Object Already Exists
Code 8007200E The Directory Service is Busy
Code 80072020 An operations error occurred
Code 8007202B A referral was returned from the server
Code 80072030 There is no such object on the server
Code 80072032 LDAP syntax error. Possibly a missing element e.g. cn=
Code 80072035 The server is unwilling to process the request
Code 8007203A The server is not operational
Code 80072EE2 Windows Update Service Problem

Code 8009xxxx
Code 80092023 Illegal character in a key name for a certificate

Code 800Axxxx Syntax Errors
In VBScript, there are 53 syntax errors all beginning with 800Axxxx. These errors should be among the easiest to cure because the message often includes the missing punctuation mark or bracket.

Code 800A0005 Invalid Procedure Call
Code 800A000D Type Mismatch
Code 800A0035 File not found
Code 800A003A File Already Exists
Code 800A0046 Permission denied
Code 800A004C Path not found
Code 800A01A8 Object required
Code 800A01AD ActiveX component can't create object
Code 800A01B6 Object doesn't support this property or method
Code 800A01BD Object doesn't support this ACTION
Code 800A01C3 Object not a collection
Code 800A01C2 Invalid property assignment
Code 800A01CE Remote Server does not exist (or is unavailable)
Code 800A01F4 Variable undefined
Code 800A01F5 Illegal assignment
Code 800A03EA Syntax Error
Code 800A03EE Expected ')'
Code 800A03F1 Variable is undefined
Code 800A03F2 Expected Identifier
Code 800A03F4 Variable Undefined
Code 800A03F6 Expected End
Code 800A03FD Expected 'Case'
Code 800A0400 Expected statement
Code 800A0401 Expected end of statement
Code 800A0407 Invalid Number
Code 800A0408 Invalid Character
Code 800A0409 Unterminated string constant
Code 800A041F Unexpected Next
Code 800A139B - Expected ']' in regular expression
Code 800A139A - Expected quantifier in regular expression
Code 800A0CC1 Item cannot be found in the collection
3
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
12.09.2014, 14:16  [ТС] 28
Команда FC.

Сравнение файлов по содержимому.
Bash
1
2
FC /B 1.txt 2.txt
echo %errorlevel%
  • 0 - если файлы совпадают
  • 1 - если файлы не совпадают
  • 2 - если хотя бы один из файлов не найден
3
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
29.06.2015, 16:23  [ТС] 29
Ошибки, возвращаемые FTP-сервером

ОшибкаОписание
110Комментарий
120Функция будет реализована через nnn минут
125Канал открыт, обмен данными начат
150Статус файла правилен, подготавливается открытие канала
200Команда корректна
211Системный статус или отклик на справочный запрос
212Состояние каталога
213Состояние файла
214Справочное поясняющее сообщение
220Слишком много подключений к FTP-серверу (можете попробовать позднее). В некоторых версиях указывает на успешное завершение промежуточной процедуры
221Благополучное завершение по команде quit
225Канал сформирован, но информационный обмен отсутствует
226Закрытие канала, обмен завершен успешно
230Пользователь идентифицирован, продолжайте
250Запрос прошел успешно
331Имя пользователя корректно, нужен пароль
332Для входа в систему необходима аутентификация
421Процедура не возможна, канал закрывается
425Открытие информационного канала не возможно
426Канал закрыт, обмен прерван
450Запрошенная функция не реализована, файл не доступен, например, занят
451Локальная ошибка, операция прервана
452Ошибка при записи файла (не достаточно места)
500Синтаксическая ошибка, команда не может быть интерпретирована (возможно она слишком длинна)
501Синтаксическая ошибка (неверный параметр или аргумент)
502Команда не используется (нелегальный тип MODE)
503Неудачная последовательность команд
504Команда не применима для такого параметра
530Система не загружена (not logged in)
532Необходима аутентификация для запоминания файла
550Запрошенная функция не реализована, файл не доступен, например, не найден
552Запрошенная операция прервана, недостаточно выделено памяти
2
Dragokas
Эксперт WindowsАвтор FAQ
17007 / 7063 / 856
Регистрация: 25.12.2011
Сообщений: 10,881
Записей в блоге: 16
22.10.2015, 21:20  [ТС] 30
xcopy под циклом всегда возвращает нулевой код возврата. Надо бы поизучать вопрос детальнее.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
 
set src=2
set dst=3
 
xcopy /y 2\123.doc 3
echo err=%errorlevel%
 
For /F "delims=" %%a in ('dir /b /a-d "%src%\*"') do call :ErrorHandler "%src%\%%a" "%dst%"
  rem if not errorlevel 1 del /F /A "%src%\%%a"
pause
goto :eof
 
:ErrorHandler
  xcopy /c /h /r /y /i /k "%~1" "%~2"
  echo err=%errorlevel%
Попробуйте закинуть в папку 2 и 3 файл 123.doc, затем открыть его вордом из папки 3 и запустить бат.
1
Mikl___
Автор FAQ
11773 / 6078 / 553
Регистрация: 11.11.2010
Сообщений: 11,069
07.11.2015, 03:20 31
Dragokas, Charles Kludge,
при формировании таблицы с заголовком делайте так
[TАВLЕ=head]...
...[/TАВLЕ]
2
Alterex
25 / 11 / 6
Регистрация: 06.11.2015
Сообщений: 37
07.11.2015, 03:20 32
По поводу того «как сгенерировать код возврата» из первого сообщения: второй пункт неверный.

Командный интерпретатор добавляет в окружение переменную с именем ERRORLEVEL.
Если эта переменная не переопределена пользователем, то она связана с кодом возврата последней выполненной команды. Только в этом случае командный интерпретатор расширяет %ERRORLEVEL% в строковое представление кода возврата последней выполненной команды. При этом команда SET ERRORLEVEL сообщает, что переменная среды не определена, но проверка условия if defined ERRORLEVEL возвращает истинное значение.
Если же пользователем определена своя переменная окружения с именем ERRORLEVEL, то она уже никак не связана с кодом возврата последней выполненной команды. В этом случае, если выполнить команду SET ERRORLEVEL=0, эта переменная просто перекрывает внутреннюю переменную командного интерпретатора с таким же именем. Вместо "0" можно присвоить переменной вообще что угодно, хоть "It’s OK", это никак не влияет на само значение кода возврата. И, например, если какая-либо команда вернет значение 1, проверка условия if %ERRORLEVEL% NEQ 0 все-равно вернет ложное значение, хотя в тоже время условие if errorlevel 1 вернет истину.
Ниже пример.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
@echo off
 
echo.
echo === Using internal ERRORLEVEL variable ========================================
:: Пытаемся создать существующую директорию.
mkdir C:
:: Значение переменной ERRORLEVEL устанавливается на основе кода завершения.
if errorlevel 1 echo Exit code: %ERRORLEVEL%
:: Проверяем существует ли переменная среды с именем ERRORLEVEL.
set ERRORLEVEL
echo.
 
echo === Using our ERRORLEVEL variable =============================================
:: Создаем переменную, которая перекрывает внутреннюю переменную ERRORLEVEL.
set ERRORLEVEL=0
:: Пытаемся перейти в несуществующую директорию.
cd .\BD9FF6A1-3D3D-4839-B7F0-0BD770EB1445
:: Значение переопределенной переменной ERRORLEVEL не связано с кодом завершения.
if errorlevel 1 echo Exit code: %ERRORLEVEL%
:: Проверяем существует ли переменная среды с именем ERRORLEVEL.
set ERRORLEVEL
:: Удаляем переопределенную переменную ERRORLEVEL.
set ERRORLEVEL=
echo.
 
echo === Again using internal ERRORLEVEL variable ==================================
:: Пытаемся создать директорию с недопустимым именем.
mkdir .\???
:: Значение переменной ERRORLEVEL вновь устанавливается на основе кода завершения.
if errorlevel 1 echo Exit code: %ERRORLEVEL%
:: Проверяем существует ли переменная среды с именем ERRORLEVEL.
set ERRORLEVEL
echo.
В общем переопределять внутреннюю переменную ERRORLEVEL - не очень хорошая мысль в принципе: изменить с помощью этой переменной код возврата не получится, а вот на грабли наступить вполне возможно.
0
Dragokas
07.11.2015, 13:49  [ТС]     Коды возврата ошибок (расшифровки ErrorLevel)*
  #33
Alterex, спасибо. Даже не знаю, почему решил так написать.
Удалил пункт № 2.
0
07.11.2015, 13:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2015, 13:49
Привет! Вот еще темы с ответами:

Обработка значения ERRORLEVEL
есть скриптик, кусок его прилагаю errorlevel выдает 17, хотя должен по моему...

Обработка значения ERRORLEVEL
Привет всем! Столкнулся с проблемой обработки значения errorlevel. Вызываю...

Получение ERRORLEVEL команды TASKKILL
Здравствуйте. В системе периодически запускается скрипт, работа которого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru