- Команда EXIT – завершить работу командного процессора или текущего командного файла.
- exit exit
- Синтаксис Syntax
- Параметры Parameters
- Примеры Examples
- Команда EXIT: выход из командной строки Windows или командного файла
- Как получить код выхода приложения из командной строки Windows?
- 7 ответов:
- пример
- Errorlevel and Exit codes
- Detecting Errorlevels
- Error Message/Error Stream
- Error level vs Exit code
- Old style .bat Batch files vs .cmd Batch scripts.
- Even in the CMD shell, some commands don’t follow the rules
- Set or Force an exit code
- PowerShell
Команда EXIT – завершить работу командного процессора или текущего командного файла.
Команда EXIT используется для завершения пакетных файлов с установкой значения переменной ERRORLEVEL или для завершения командного процессора CMD.EXE ( для выхода из командной строки), если она выполняется вне пакетного файла.
Формат командной строки:
EXIT [/B] [exitCode]
Параметры командной строки:
/B — Предписывает завершить текущий пакетный файл-сценарий вместо завершения CMD.EXE. Если выполняется вне пакетного файла-сценария, то будет завершена программа CMD.EXE
exitCode — Указывает цифровое значение. Если указан ключ /B, определяет номер для ERRORLEVEL. В случае завершения работы CMD.EXE, устанавливает код завершения процесс с данным номером.
Примеры использования команды EXIT
exit — завершить текущий сеанс CMD
Команда EXIT с параметрами используются, как правило, только в командных файлах. Например, для индикации результата выполнения с установкой значения переменной среды ERRORLEVEL
REM перейти к метке, где выполняется выход с ERRORLEVEL=0
REM перейти к метке, где выполняется выход с ERRORLEVEL=1
REM установить ERRORLEVEL равный 0 и завершить работу
REM установить ERRORLEVEL равный 1 и завершить работу
Параметр /B используется в тех случаях, когда выполняется завершение командного файла, но необходимо продолжить работу командного процессора. Например, когда командный файл 1.bat вызывает командной CALL другой командный файл 2.bat , результат выполнения которого, характеризуется значением переменной окружения ERRORLEVEL . Если в вызываемом командном файле использовать команду EXIT без параметра /B, то будет завершена работа вызываемого файла 2.bat, а также вызывающего файла 1 .bat и интерпретатора CMD.EXE, т.е вместо выхода из вызываемого файла будет полностью завершен сеанс командной строки.
Простейший пример, когда командный файл 1.bat вызывает на выполнение другой командный файл с именем 2.bat и выводит на экран значение ERRORLEVEL, установленное при выходе из вызываемого файла:
echo Batch file 2.bat executed with ERRORLEVEL = %ERRORLEVEL%
Файл 2.bat завершается командой EXIT с установкой значения ERRORLEVEL, равного 128:
При выполнении командного файла 1.bat на экран будет выведено сообщение:
Batch file 2.bat executed with ERRORLEVEL = 128
Попробуйте убрать параметр /B в команде EXIT командного файла 2.bat и оцените полученный результат.
exit exit
Область применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Выход из интерпретатора команд или текущего пакетного скрипта. Exits the command interpreter or the current batch script.
Синтаксис Syntax
Параметры Parameters
Параметр Parameter | Описание Description |
---|---|
/b /b | Выход из текущего пакетного скрипта вместо выхода из Cmd.exe. Exits the current batch script instead of exiting Cmd.exe. Если выполняется из-за пределов пакетного скрипта, выполняет выход из Cmd.exe. If executed from outside a batch script, exits Cmd.exe. |
Указывает числовое число. Specifies a numeric number. Если указан параметр /b , переменной среды ERRORLEVEL присваивается это число. If /b is specified, the ERRORLEVEL environment variable is set to that number. Если интерпретатор команд закрывается, код завершения процесса устанавливается в это число. If you are quitting the command interpreter, the process exit code is set to that number. | |
/? /? | Отображение справки в командной строке. Displays help at the command prompt. |
Примеры Examples
Чтобы закрыть интерпретатор команд, введите: To close the command interpreter, type:
Команда EXIT: выход из командной строки Windows или командного файла
При работе с операционными системами Windows пользователям и системным администраторам довольно часто приходится использовать командную строку. Большинство из нас привыкло пользоваться графическим интерфейсом системы, а потому закрывает окно командной строки, используя мышь. Впрочем, закончив набирать команды, можно не отрывать рук от клавиатуры, и закрыть окно командной строки через EXIT.
У команды exit есть и второе предназначение — выход из текущего командного файла. Допустим, что в текущем окне командного интерпретатора у вас исполняется какой-то BAT-файл или CMD-файл. Если нужно выйти из него, не закрывая окно командной строки, это также можно сделать командой exit . Синтаксис и примеры ниже.
B — завершение текущего командного файла вместо завершения процесса CMD.EXE (закрытия окна командной строки). Если использовать вне пакетного файла-сценария, будет завершён процесс CMD.EXE;
exitCode — цифровой код, определяющий номер для ERRORLEVEL. Если произошло завершение работы CMD.EXE, то будет установлен код завершения процесса с данным номером.
Команда выше просто закроет окно командной строки.
Нередки ситуации, когда один командный файл вызывает другой командный файл. Предположим, что файл primer1.bat вызывает файл primer2.bat. Используя команду exit , мы вызовем закрытие файла primer2.bat, а также primer1.bat, после чего закроется и окно командной строки.
Чтобы этого не произошло, используем /b . Допустим, что файл primer1.bat вызывает primer2.bat и выводит на экран значение ERRORLEVEL, которое взято при выходе из primer2.bat:
Файл primer2.bat завершается командой exit с установкой значения ERRORLEVEL, равного 128:
Это приведёт к выводу следующего сообщения:
Как видите, польза команды exit не только в том, что она помогает закрывать окно командной строки без помощи мыши.
Как получить код выхода приложения из командной строки Windows?
Я запускаю программу и хочу посмотреть, что ее код возврата (так как он возвращает разные коды, основанные на разных ошибках).
Я знаю, что в bash я могу сделать это, запустив
Что мне делать при использовании cmd.exe на Windows?
7 ответов:
псевдо переменная окружения с именем errorlevel хранит код возврата:
и if команда имеет специальный синтаксис:
посмотреть if /? для сведения.
пример
внимание: если вы установили имя переменной среды errorlevel , %errorlevel% вернет это значение, а не код выхода. Использовать (установить errorlevel= ) очистить переменную окружения, разрешив доступ к истинному значению errorlevel через %errorlevel% переменные среды.
тестирование ErrorLevel работает консоль приложения, но как намекнул на by dmihailescu, это не будет работать, если вы пытаетесь запустить в окне приложения (например, на основе Win32) из командной строки. Оконное приложение будет работать в фоновом режиме, и управление немедленно вернется в командную строку (скорее всего, с ErrorLevel нуль, чтобы указать, что процесс был создано успешно). Когда оконное приложение в конце концов выходит, его статус выхода теряется.
вместо использования консольной программы запуска C++, упомянутой в другом месте, более простой альтернативой является запуск оконного приложения с помощью командной строки . Это запустит оконное приложение, дождется его выхода, а затем вернет управление в командную строку с состоянием выхода процесса, установленным в ErrorLevel .
используйте встроенную переменную ERRORLEVEL:
это может работать неправильно при использовании программы, которая не подключена к консоли, потому что это приложение может все еще работать, пока вы думаете, что у вас есть код выхода. Решение для этого в C++ выглядит следующим образом:
если вы хотите точно соответствовать коду ошибки (например, равен 0), используйте это:
if errorlevel 0 игр errorlevel >= 0. Смотрите if /? .
в какой-то момент мне нужно было точно протолкнуть события журнала из Cygwin в журнал событий Windows. Я хотел, чтобы сообщения в WEVL были пользовательскими, имели правильный код выхода, детали, приоритеты, сообщение и т. д. Поэтому я создал маленький скрипт, чтобы позаботиться об этом. Вот он на GitHub,logit.sh.
вот временная часть содержимого файла:
вот функция для создания событий в WEVL:
выполнение пакетного сценария и вызов _ _ create _ event:
стоит отметить, что .летучая мышь и. Файлы CMD работают по-разному.
есть ключевое различие между способом .ЦМД И.Пакетные файлы BAT устанавливают уровни ошибок:
старый .Пакетный скрипт BAT, выполняющий «новые» внутренние команды: APPEND, ASSOC, PATH, PROMPT, FTYPE и SET, будет устанавливать уровень ERRORLEVEL только в случае возникновения ошибки. Так что если у вас есть две команды в пакетный сценарий и первый сбой, уровень ошибок останется установленным даже после того, как вторая команда завершится успешно.
Это может затруднить отладку проблемного сценария BAT, пакетный сценарий CMD более согласован и будет устанавливать уровень ошибок после каждой команды, которую вы запускаете [source].
Это вызывало у меня бесконечное горе, поскольку я выполнял последовательные команды, но уровень ошибок оставался неизменным даже в случае неудачи.
Errorlevel and Exit codes
Almost all applications and utilities will set an Exit Code when they complete/terminate.
The exit codes that are set do vary, in general a code of 0 (false) will indicate successful completion.
By default SCCM will only consider 0 a success, but commands like Robocopy may return success Exit Codes from 0 to 7.
The exit codes set by resource kit utilities are not always consistent, they can vary between machines with different Service packs/Resource kit updates applied. Some utilities will return negative numbers as an exit code.
If you attempt to execute a non-existent command %ERRORLEVEL% will be set to 9009
Detecting Errorlevels
There are two different methods of checking an errorlevel, the first syntax provides compatibility with old .bat batch files from the era of MS-DOS
The errorlevel is made available via IF ERRORLEVEL . or the %ERRORLEVEL% variable.
IF ERRORLEVEL n statements should be read as IF Errorlevel >= number
i.e.
IF ERRORLEVEL 0 will return TRUE whether the errorlevel is 0, 1 or 5 or 64
IF ERRORLEVEL 1 will return TRUE whether the errorlevel is 1 or 5 or 64
IF NOT ERRORLEVEL 3 means if ERRORLEVEL is less than 3 ( 2, 1, 0 or a negative number).
To check for a specific error level N, you can use the following construct:
IF ERRORLEVEL N IF NOT ERRORLEVEL N+1 COMMAND
This is not very readable or user friendly and does not account for negative error numbers.
A preferred method of checking Errorlevels is to use the %ERRORLEVEL% variable:
IF %ERRORLEVEL% NEQ 0 Echo An error was found
IF %ERRORLEVEL% EQU 0 Echo No error found
IF %ERRORLEVEL% EQU 0 (Echo No error found) ELSE (Echo An error was found)
IF %ERRORLEVEL% EQU 0 Echo No error found || Echo An error was found
This allows you to trap errors that can be negative numbers, you can also test for specific errors:
IF %ERRORLEVEL% EQU 64 .
When ending a subroutine, you can use EXIT /b N to set a specific ERRORLEVEL N.
Raymond Chen [MSFT] explains: ERRORLEVEL is not the same as the %ERRORLEVEL% environment variable.
Error Message/Error Stream
In addition to setting an ERRORLEVEL , many utilities will output an error message on the error stream (STDERR) , by default these messages will appear on the console, but they can be redirected with 2> .
Many utilities set an ERRORLEVEL and also output some error text, some utilities set an ERRORLEVEL but don’t display error text and some will display error text without setting an ERRORLEVEL . Some utilities behave differently depending on the severity of the error.
Error messages are likely to be different for each language/locale so it is generally more robust to just test the ERRORLEVEL rather than any text message output.
Error level vs Exit code
When an external command is run by CMD.EXE, it will detect the executable’s Return or Exit Code and set the ERRORLEVEL to match. In most cases the ERRORLEVEL will be the same as the Exit code, but there are some cases where they can differ.
An Exit Code can be detected directly with redirection operators (Success/Failure ignoring the ERRORLEVEL) this can often be more reliable than trusting the ERRORLEVEL which may or may not have been set correctly.
Old style .bat Batch files vs .cmd Batch scripts.
There is a key difference between the way .CMD and .BAT batch files set errorlevels:
A .BAT batch script running the ‘new’ internal commands: APPEND, ASSOC, PATH, PROMPT, FTYPE and SET will only change the ERRORLEVEL if an error occurs. So if you have two commands in the batch script and the first fails, the ERRORLEVEL will remain set even after the second command succeeds.
There is little consistency in the ERRORLEVEL s raised by different commands which makes debugging a problem .BAT script more difficult than an equlvalent .CMD script.
A .CMD batch script will set/reset the ERRORLEVEL after every command that you run [source] Mark Zbikowski (MSFT).
Here’s an example script with an error check after each command:
command1
if %errorlevel% EQU 0 (echo OK ) Else ( Echo ERROR FAILED &color CF )
command2
if %errorlevel% EQU 0 (echo OK ) Else ( Echo ERROR FAILED &color CF )
A .CMD batch file running the above will display an error after the command that fails.
A .BAT batch file running the above will display an error after the command that fails and also for every subsequent test.
Even in the CMD shell, some commands don’t follow the rules
Even though a CMD batch script should set or reset ERRORLEVEL after every command, there are a few exceptions:
Commands that do NOT affect the ERRORLEVEL:
BREAK, ECHO, ENDLOCAL, FOR, IF, PAUSE, REM, RD/RMDIR, TITLE
Commands that will set but not clear an ERRORLEVEL:
CLS, GOTO, KEYS, POPD, SHIFT
Commands that set an Exit Code but not the ERRORLEVEL:
RD/RMDIR
Commands that set an ERRORLEVEL but not the Exit Code (SO explanation):
MD/MKDIR
Set or Force an exit code
You can make a batch file return a non-zero exit code by using the EXIT command.
Exit 0
Exit /B 5
To force an ERRORLEVEL of 1 to be set without exiting, run a small but invalid command like COLOR 00 or run (CALL) which does nothing other than set the ERRORLEVEL to 1.
To clear the ERRORLEVEL back to 0, run (call ) , which does nothing except set the ERRORLEVEL to 0.
You should never attempt to SET the %ERRORLEVEL% because that will create a user variable named %ERRORLEVEL% which then takes precedence over the internal pseudo variable %ERRORLEVEL% .
You can clear any such user variable with the following two commands at the start of your script, but really the best practice is to never set a variable with that name in the first place:
Set «errorlevel=1»
Set «errorlevel=»
PowerShell
In PowerShell $? contains True if last operation succeeded and False otherwise.
The exit code of the last Win32 executable execution is stored in the automatic variable $LASTEXITCODE
To read exit codes (other than 0 or 1) launch the PowerShell script and return the $LASTEXITCODE in a single line like this:
powershell.exe -noprofile C:\scripts\script.ps1; exit $LASTEXITCODE
“I’d rather wake up in the middle of nowhere than in any city on earth”