Форум программистов, компьютерный форум, киберфорум
Наши страницы

Batch (CMD/BAT)

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 432, средняя оценка - 4.95
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
#1

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

20.12.2012, 22:21. Просмотров 71507. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Коды возврата ошибок (расшифровки ErrorLevel)* (CMD/BAT):

Сгенерировать коды ошибок CMD - CMD/BAT
Добрый, помогите плиз сгенерировать сообщения об ошибках в командной строке CMD в случаях: 1) Отсутствие связи с сервером 2) Указан...

Коды ошибок Windows - Администрирование Windows
Вам приходилось встречать при работе на компьютере раздражающие всплывающие окна с указанием различных кодов? Расшифровка КОДОВ ОШИБОК...

Проверка %ERRORLEVEL% - CMD/BAT
Добрый день! Помогите пожалуйста. После запуска команды необходимо сделать проверку %ERRORLEVEL%. Если без ошибок, то значение 0,...

%ERRORLEVEL% в Windows Embedded CE 6.0 - CMD/BAT
@echo off set count=0 :begin set /A count=count+1 ping localhost -n 10 ping -n 1 -w 3000 192.168.9.1 if %errorlevel%==1 goto...

Обработка значения ERRORLEVEL - CMD/BAT
Привет всем! Столкнулся с проблемой обработки значения errorlevel. Вызываю внешний скрипт call script1.bat %параметры% Внутри...

Обработка значения ERRORLEVEL - CMD/BAT
есть скриптик, кусок его прилагаю errorlevel выдает 17, хотя должен по моему мнению 1 т.к.конечного пути \a\1\ не существует но даже если...

32
Badger
90 / 90 / 3
Регистрация: 25.06.2012
Сообщений: 278
18.01.2013, 17:38 #2
А как можно подглядеть возвращаемые командами коды ошибок errorlevel?
В разделе Предложения по совершенствованию увидел только что планируется выложить данную инфу, как успехи?)
0
sov44
1756 / 740 / 126
Регистрация: 09.04.2011
Сообщений: 1,312
18.01.2013, 21:05 #3
Badger, тыц
0
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
18.01.2013, 21:13  [ТС] #4
sov44, ну там не так много.

Это наверное больше вопрос ко мне, что надо бы развивать тему, раз предложил =)
Badger, все это время, готового не находил по встроенным командам (ай-да и не искал).
Если что найдете, выкладываем. Пока информации 0. Есть только по другим (внешним) программам, вроде WinRAR.

А для тестирования вручную нужно готовить среду, чтобы испытать команды в разных ситуациях (то ли это нехватка прав, работа с заблокированным объектом) и т.д.

По другой предложенной темы (ключи) инфы довольно много.
1
Badger
90 / 90 / 3
Регистрация: 25.06.2012
Сообщений: 278
21.01.2013, 14:41 #5
Цитата Сообщение от sov44 Посмотреть сообщение
тыц
Улыбнули Не видел еще такого.
Цитата Сообщение от Dragokas Посмотреть сообщение
Если что найдете, выкладываем.
Поищем.
0
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
22.01.2013, 02:56  [ТС] #6
Ну что же начнем собирать.

Архиватор WinRAR
rar.exe

Код возврата
Описание
0Операция успешно завершена.
1Предупреждение. Произошли некритические ошибки.
2Произошла критическая ошибка.
3Неверная контрольная сумма CRC32. Данные повреждены.
4Предпринята попытка изменить заблокированный архив.
5Произошла ошибка записи на диск.
6Произошла ошибка открытия файла.
7Ошибка при указании параметра в командной строке.
8Недостаточно памяти для выполнения операции.
9Ошибка при создании файла.
10Нет файлов, удовлетворяющих указанной маске, и параметров.
255Операция была прервана пользователем.
3
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
22.01.2013, 19:43 #7
"VERIFY dummy_text" will set %ERRORLEVEL% to 1
0
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
22.01.2013, 20:05  [ТС] #8
Charles Kludge, все равно не понял как она работает.
Написано, что по-умолчанию - выключена.
Т.е. ключ /V в Copy
Bash
Copy /V file1 file2
"временно включет проверку" результата записи и возвращает некий ненулевой ErrorLevel в случае провала.
На чем бы проверить? - может, флешку вытянуть в процессе записи...
0
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
22.01.2013, 22:11 #9
Common command / program exit codes / error levels
0 Успешное завершение/Program suseccfully completed.
1 Некорректная ф-ция/Incorrect function.
2 Файл не найден/The system cannot find the file specified.
3 Путь не найден/The system cannot find the path specified.
5 Доступ запрещён/Access is denied. Нет прав доступа к ресурсу.
9009./ 0x2331 программа не распознана как внутренняя или внешняя команда или батник/Program is not recognized as an internal or external command, operable program or batch file.
3221225477. 0xC0000005 Ошибка доступа/Access violation. Некорректное завершение или крах.
3221225495. 0xC0000017 Закончилась виртуальная память/Not enough virtual memory is available.
3221225786. 0xC000013A Приложение завершено по CTRL+C/The application terminated as a result of a CTRL+C.
3221225794. 0xC0000142 Ошибка инициализации приложения/The application failed to initialize properly. Обычно возникает при попытке запуска приложения (через иконку на десктопе), на которое у юзверя нет прав. Другая причина - ошибка инициализации gdi32.dll или user32.dll.
3221226505. 0xC0000409 Переполнение стека/Stack buffer overflow / overrun. Критическая ошибка в самом приложении.
3221225725. 0xC00000FD Стек исчерпан/Stack buffer underrun. Критическая ошибка в самом приложении.
3
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
22.01.2013, 22:18  [ТС] #10
Ок, Charles Kludge, исправился. Раз некоторые приложения для кода возврата выделяют буфер DWORD,
думаю, будет нелишним опубликовать и такие значения:

cmd.exe

Код Oct из DWORD
Описание
-4294958287программа не распознана как внутренняя или внешняя команда или батник/Program is not recognized as an internal or external command, operable program or batch file.
-1073741819Ошибка доступа/Access violation. Некорректное завершение или крах.
-1073741801Закончилась виртуальная память/Not enough virtual memory is available.
-1073741510Приложение завершено по CTRL+C (или принудительное завершение работы интерпретатора)/The application terminated as a result of a CTRL+C.
-1073741502Ошибка инициализации приложения/The application failed to initialize properly.Обысно возникает при попытке запуска приложения(через иконку на десктопе) на которое у юзверя нет прав. Другая причина - ошибка инициализации gdi32.dll или user32.dll.
-1073740791Переполнение стека/Stack buffer overflow / overrun. Критическая ошибка в самом приложении.
-1073741571Стек исчерпан/Stack buffer underrun. Критическая ошибка в самом приложении.
ПроизвольныйКод, заданный пользователем в команде Exit /B [code]
2
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
22.01.2013, 22:26 #11
Dragokas, это и есть 0xC000013A, см выше.
0
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
22.01.2013, 22:32  [ТС] #12
Почему значения не совпали?
0
Charles Kludge
Клюг
7637 / 3152 / 364
Регистрация: 03.05.2011
Сообщений: 8,382
22.01.2013, 22:38 #13
Дык, совпали. Копипастим в calc, смотрим в hex, младший dword.
1
Dragokas
Эксперт WindowsАвтор FAQ
16242 / 6941 / 834
Регистрация: 25.12.2011
Сообщений: 10,722
Записей в блоге: 16
22.01.2013, 22:49  [ТС] #14
Ясно, значит у меня ответ вернуло 2-байтовый. FFFFFFFFC000013A.

P.S. Тестировал через
Visual Basic
1
Msgbox CreateObject("WScript.Shell").Run("cmd /c pause", 1, True)
0
Charles Kludge
22.01.2013, 22:54     Коды возврата ошибок (расшифровки ErrorLevel)*
  #15

Не по теме:

Видать, индусы поняли, чтобы возвращать DWORD, придётся писать очередной костыль и забили.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2013, 22:54
Привет! Вот еще темы с ответами:

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

Errorlevel 9009 при выполнении dsmod - CMD/BAT
при выполнении: set login=%username% for /f "delims=xxx" %%a in ('findstr %login% AD_Account.txt') do set a=%%a set a=%a:~20,50% ...

Удаленный запуск и остановка служб PsService: вне зависимости от состояние службы ERRORLEVEL всегда 1 - CMD/BAT
Доброго дня Необходимо запуск и остановка служб Win XP удаленно. Имеется такой батник: @ECHO off start C:\psservice \\192.168.3.1...

Обработка кода возврата WinRAR - CMD/BAT
Помогите, в задании нужно проверить архив на наличие файла, и в случае отсутствия вывести сообщение. Всё работает, кроме кода возврата,...


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

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

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