BREAK — управление обработкой Ctrl+C в командной строке Windows

BREAK включает или отключает расширенную обработку комбинации Ctrl+C в CMD. Команда унаследована из DOS и влияет на возможность прерывания выполняемых операций.

BREAK — управление обработкой Ctrl+C в командной строке Windows

BREAK — встроенная команда CMD, которая включает или отключает расширенную проверку комбинации клавиш Ctrl+C во время выполнения команд. Команда унаследована из эпохи MS-DOS и сохранена в Windows для совместимости; в современных версиях Windows её практический эффект минимален, однако в bat-скриптах она по-прежнему встречается.

Синтаксис команды BREAK

BREAK [ON | OFF]

Без аргументов BREAK выводит текущее состояние: BREAK is on или BREAK is off.

  • ON — включить расширенную проверку Ctrl+C (DOS-поведение: проверять нажатие при каждом системном вызове).
  • OFF — отключить расширенную проверку; прерывание возможно только при чтении с консоли.

Ключи и параметры

Параметр Описание Пример
(без параметра) Вывести текущий статус BREAK BREAK
ON Включить расширенную обработку Ctrl+C BREAK ON
OFF Отключить расширенную обработку Ctrl+C BREAK OFF

Других ключей у команды нет — это одна из самых лаконичных команд CMD.

Примеры использования

Проверить текущий статус

Запустите команду без аргументов, чтобы узнать, включена ли расширенная обработка Ctrl+C в текущей сессии.

BREAK

CMD выведет строку BREAK is on или BREAK is off.

Включить расширенную обработку Ctrl+C

Используйте BREAK ON перед запуском цикла или длительной операции, если хотите иметь возможность прервать её нажатием Ctrl+C.

BREAK ON
FOR /L %%i IN (1,1,100) DO (
    echo Обработка %%i
    ping -n 2 127.0.0.1 >nul
)

После нажатия Ctrl+C выполнение цикла будет прервано.

Отключить обработку Ctrl+C в критической секции

В скриптах резервного копирования или транзакционных операциях можно временно запретить прерывание, чтобы не оставить данные в несогласованном состоянии.

BREAK OFF
:: Критическая операция — нельзя прерывать
XCOPY C:\data D:\backup /E /Y
BREAK ON

После завершения XCOPY обработка Ctrl+C снова включается.

Использование в bat-файле с проверкой статуса

Сохраните текущий статус, выполните операцию, затем восстановите исходное состояние.

@echo off
BREAK OFF
echo Запуск защищённой секции...
COPY важный_файл.dat резервная_копия.dat
BREAK ON
echo Готово.

Проверка влияния в интерактивном сеансе

Убедитесь, что после выхода из вложенной оболочки статус BREAK восстанавливается.

BREAK ON
cmd /c "BREAK OFF && BREAK"
BREAK

Последняя строка покажет, что в родительской оболочке BREAK по-прежнему on — вложенный cmd /c не влияет на родительский сеанс.

Частые ошибки и решения

Ошибка / ситуация Причина Решение
BREAK ON не позволяет прервать программу через Ctrl+C В 32/64-разрядных Windows расширенная DOS-проверка не поддерживается ядром; команда принята, но не влияет на поведение Win32-приложений Для прерывания Win32-процессов используйте Ctrl+C напрямую или TASKKILL /F /PID <pid>
Неверный параметр — ошибка при вводе BREAK YES Команда принимает только ON, OFF или пустой ввод Используйте строго BREAK ON или BREAK OFF
BREAK в PowerShell вызывает ошибку BREAK в PowerShell — ключевое слово для выхода из цикла, а не команда CMD Открывайте cmd.exe явно: cmd /c "BREAK ON"
Статус BREAK не сохраняется после закрытия CMD Настройка действует только в текущей сессии CMD, не сохраняется в реестре Добавьте BREAK ON в начало каждого скрипта, где это нужно
BREAK OFF не защищает от Ctrl+Break Комбинация Ctrl+Break обрабатывается независимо от состояния BREAK Защиты от Ctrl+Break средствами CMD нет; используйте обёртку в виде сервиса или планировщика задач

Когда применять, а когда нет

BREAK стоит использовать только в bat-скриптах, которые должны быть совместимы с очень старым окружением или документируют поведение DOS-эпохи. В современных скриптах PowerShell или cmd.exe под Windows 10/11 команда технически принимается, но реального эффекта не оказывает — ядро NT не реализует DOS-режим расширенной проверки. Аналог в PowerShell: ключевое слово break внутри циклов (foreach, while) и блоков switch — оно прерывает выполнение конструкции, но не связано с Ctrl+C. Для перехвата сигнала прерывания в PowerShell используйте блок try/finally или обработчик Register-EngineEvent.

FAQ

Что делает BREAK без параметров?

Выводит текущее состояние: BREAK is on или BREAK is off. Никаких изменений в настройки не вносит.

Влияет ли BREAK ON на реальное прерывание программ в Windows 10?

Нет. В 32/64-разрядных версиях Windows ядро NT не поддерживает DOS-режим расширенной проверки Ctrl+C. Команда принимается без ошибки, но поведение системы не меняется.

Как прервать зависший скрипт CMD, если BREAK не помогает?

Нажмите Ctrl+C прямо в окне CMD — это работает независимо от состояния BREAK. Если CMD не реагирует, используйте TASKKILL /F /PID <pid> или закройте окно принудительно через Диспетчер задач.

Можно ли навсегда включить BREAK ON для всех сессий CMD?

Нет, настройка не сохраняется между сессиями. Добавьте BREAK ON в файл автозапуска CMD через ключ реестра HKCU\Software\Microsoft\Command Processor\AutoRun, если это действительно нужно.

Чем BREAK в CMD отличается от BREAK в PowerShell?

В CMD BREAK — команда управления обработкой Ctrl+C (DOS-совместимость). В PowerShell break — ключевое слово для немедленного выхода из цикла или блока switch. Это совершенно разные механизмы.

Нужна ли BREAK в скриптах автоматизации?

Как правило, нет. Современные скрипты CMD используют Ctrl+C, TASKKILL или механизм ошибок (IF ERRORLEVEL) для управления потоком. BREAK ON/OFF имеет смысл только при портировании старых DOS-скриптов.

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

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