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

Batch (CMD/BAT)

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

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

20.12.2012, 22:21. Просмотров 74564. Ответов 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
Mikl___
Автор FAQ
11021 / 5795 / 511
Регистрация: 11.11.2010
Сообщений: 10,803
07.11.2015, 03:20 #31
Dragokas, Charles Kludge,
при формировании таблицы с заголовком делайте так
[TАВLЕ=head]...
...[/TАВLЕ]
2
Alterex
25 / 11 / 4
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2015, 13:49
Привет! Вот еще темы с ответами:

Получение 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
Помогите, в задании нужно проверить архив на наличие файла, и в случае отсутствия вывести сообщение. Всё работает, кроме кода возврата,...


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

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

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