- EXIT — завершение скрипта или CMD с кодом возврата
- Синтаксис команды EXIT
- Ключи и параметры
- Примеры использования
- Закрытие окна командной строки
- Завершение скрипта с кодом успеха
- Завершение скрипта с кодом ошибки
- Проверка кода возврата дочернего скрипта
- EXIT в функции (подпрограмме CALL :label)
- Быстрый выход из скрипта при любой ошибке
- Частые ошибки и решения
- Когда применять, а когда нет
- FAQ
- В чём разница между EXIT и EXIT /B?
- Как передать код ошибки из .bat-скрипта в планировщик задач?
- Что будет, если не написать EXIT в конце .bat-файла?
- Можно ли использовать отрицательные коды возврата?
- Как проверить код возврата скрипта сразу после его выполнения?
EXIT — завершение скрипта или CMD с кодом возврата
EXIT — встроенная команда CMD для завершения текущего командного файла (.bat, .cmd) или закрытия сеанса командной строки. Ключевая возможность — передача кода возврата вызывающему процессу через %ERRORLEVEL%, что делает EXIT незаменимой в автоматизации и CI/CD-скриптах, где по коду возврата судят об успехе или провале задачи.
Синтаксис команды EXIT
EXIT [/B] [код_возврата]
Плейсхолдеры:
/B— завершить только текущий скрипт (или текущую областьCALL), не закрывая окно CMD.код_возврата— целое число, которое будет установлено в%ERRORLEVEL%. Если не указан — используется текущий%ERRORLEVEL%.
Ключи и параметры
| Ключ / параметр | Описание | Пример |
|---|---|---|
| (без ключей) | Закрыть текущий сеанс CMD или завершить скрипт и закрыть окно | EXIT |
/B | Завершить текущий скрипт без закрытия окна CMD. Если вызвано не из скрипта — эквивалентно EXIT | EXIT /B |
код_возврата | Установить числовой код возврата (0 = успех, любое другое значение = ошибка по соглашению) | EXIT /B 0 |
/B 0 | Завершить скрипт с кодом успеха | EXIT /B 0 |
/B 1 | Завершить скрипт с кодом ошибки | EXIT /B 1 |
Примеры использования
Закрытие окна командной строки
Завершить интерактивный сеанс CMD по окончании работы.
EXIT
Окно командной строки закрывается немедленно. Если CMD была запущена из другого процесса — тот получит код возврата.
Завершение скрипта с кодом успеха
В .bat-файле нужно явно указать успешное завершение, чтобы вызывающий инструмент (планировщик, CI-система) не трактовал выход как ошибку.
@echo off rem ... логика скрипта ... echo Задача выполнена успешно. EXIT /B 0
Скрипт завершается, устанавливает %ERRORLEVEL%=0. Окно CMD остаётся открытым.
Завершение скрипта с кодом ошибки
При обнаружении ошибки скрипт должен немедленно прекратить выполнение и сообщить об ошибке вызывающему процессу.
@echo off
if not exist "C:\required_file.txt" (
echo Ошибка: файл не найден.
EXIT /B 1
)
echo Файл найден, продолжаем.
EXIT /B 0 Если файл отсутствует — скрипт немедленно завершается с кодом 1. Вызывающий скрипт или планировщик задач увидит ошибку через %ERRORLEVEL%.
Проверка кода возврата дочернего скрипта
Родительский скрипт вызывает дочерний и проверяет, успешно ли он завершился.
@echo off
CALL child_script.bat
IF %ERRORLEVEL% NEQ 0 (
echo Дочерний скрипт завершился с ошибкой: %ERRORLEVEL%
EXIT /B %ERRORLEVEL%
)
echo Дочерний скрипт выполнен успешно.
EXIT /B 0 Если дочерний скрипт вернул ненулевой код — родительский тоже завершается с тем же кодом, передавая информацию об ошибке наверх по цепочке.
EXIT в функции (подпрограмме CALL :label)
При использовании подпрограмм через CALL :label нужно возвращаться из функции без закрытия скрипта.
@echo off
CALL :CheckFile "C:\data.txt"
echo Код после функции: %ERRORLEVEL%
EXIT /B
:CheckFile
if exist "%~1" (
EXIT /B 0
) else (
EXIT /B 2
)
EXIT /B внутри функции возвращает управление в точку после CALL :CheckFile. Главный EXIT /B в конце основного блока предотвращает «провал» выполнения в тело функции.
Быстрый выход из скрипта при любой ошибке
Вместо проверок после каждой команды — один обработчик в начале скрипта с использованием ||.
@echo off xcopy C:\src D:\backup /S /I /Y || EXIT /B 1 echo Резервная копия создана. EXIT /B 0
Если xcopy завершится с ошибкой — оператор || запустит EXIT /B 1 немедленно, не выполняя следующие строки.
Частые ошибки и решения
| Ошибка / ситуация | Причина | Решение |
|---|---|---|
EXIT закрывает всё окно CMD вместо только скрипта | Использован EXIT без ключа /B | Замените на EXIT /B [код] — тогда завершится только скрипт, окно останется |
%ERRORLEVEL% всегда 0 после EXIT /B | Код возврата не указан явно; используется текущий ERRORLEVEL, который уже равен 0 | Передавайте код явно: EXIT /B 1 для ошибки, EXIT /B 0 для успеха |
| Скрипт продолжает выполнение после EXIT /B в подпрограмме | Отсутствует EXIT /B в конце основного блока — выполнение «проваливается» в тело функции | Всегда ставьте EXIT /B (или GOTO :EOF) перед первой меткой-функцией |
| Планировщик задач не видит ошибку скрипта | Скрипт завершается без явного кода или с EXIT 0 даже при ошибке | Проверьте логику условий и добавьте EXIT /B 1 во все ветки обработки ошибок |
EXIT /B не работает в интерактивной CMD (без скрипта) | В интерактивной сессии /B не имеет смысла — нет скрипта для завершения | В интерактивной CMD EXIT /B ведёт себя как обычный EXIT и закрывает окно |
Когда применять, а когда нет
EXIT с кодом возврата обязательна в любом production-скрипте, результат которого проверяется автоматически: планировщик задач Windows, Jenkins, GitLab CI, Ansible и другие инструменты анализируют %ERRORLEVEL% после выполнения .bat-файла. Используйте EXIT /B 0 в конце успешного скрипта и EXIT /B 1 (или другой ненулевой код) при ошибке. Не используйте EXIT (без /B) внутри скриптов, если хотите сохранить окно открытым. В PowerShell аналог — оператор exit [код], который работает идентично: exit 0 — успех, exit 1 — ошибка.
FAQ
В чём разница между EXIT и EXIT /B?
EXIT закрывает весь процесс CMD — и скрипт, и окно. EXIT /B завершает только текущий скрипт (или подпрограмму), возвращая управление вызывающему коду и оставляя окно открытым.
Как передать код ошибки из .bat-скрипта в планировщик задач?
Завершите скрипт командой EXIT /B 1 при ошибке и EXIT /B 0 при успехе. Планировщик задач фиксирует этот код как «Последний результат выполнения» и может триггерить уведомления или повторный запуск.
Что будет, если не написать EXIT в конце .bat-файла?
Ничего критичного — скрипт завершится автоматически при достижении конца файла с текущим значением %ERRORLEVEL%. Но явный EXIT /B 0 делает намерение явным и исключает случайный ненулевой код от последней выполненной команды.
Можно ли использовать отрицательные коды возврата?
Технически CMD принимает отрицательные числа, но по соглашению Windows используются неотрицательные коды: 0 — успех, 1 и выше — разные типы ошибок. Отрицательные коды могут некорректно обрабатываться внешними инструментами.
Как проверить код возврата скрипта сразу после его выполнения?
Запустите скрипт командой CALL myscript.bat или просто myscript.bat, после чего проверьте %ERRORLEVEL%: echo %ERRORLEVEL% или IF %ERRORLEVEL% NEQ 0 echo Ошибка!.


