EXIT — завершение скрипта или CMD с кодом возврата

EXIT завершает командный файл .bat/.cmd или закрывает сеанс CMD. С ключом /B завершает только скрипт без закрытия окна, а код возврата передаётся в %ERRORLEVEL%.

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 Ошибка!.

Оцените статью
( Пока оценок нет )
MW10
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.