Windows Command Processor (cmd.exe)¶
Windows Command Processor (cmd.exe) — командный интерпретатор операционных систем семейства Microsoft Windows, предназначенный для выполнения команд пользователя, обработки пакетных файлов (.bat, .cmd) и управления системными ресурсами через текстовый интерфейс. В отличие от своей предшественницы COMMAND.COM из системы MS-DOS, cmd.exe является 32-битным (и 64-битным в 64-разрядных системах) приложением, работающим поверх Win32 API, и не является частью MS-DOS.
¶Происхождение и история
До появления Windows NT системный командный интерпретатор Windows 95 и Windows 98 основывался на MS-DOS: файл COMMAND.COM загружался при старте и обеспечивал совместимость с доксовыми программами. С выходом Windows NT 3.1 в 1993 году Microsoft представила собственный интерпретатор — cmd.exe, написанный с нуля для 32-разрядной среды Win32.
Основные вехи развития:
- 1993 — cmd.exe впервые появляется в Windows NT 3.1 как основной командный интерпретатор;
- 2001 — с выходом Windows XP cmd.exe становится стандартным интерпретатором и для потребительских редакций Windows, заменяя COMMAND.COM;
- 2006 — в Windows Vista появляется улучшенная поддержка UTF-8, команды robocopy, assoc и fc;
- 2009 — Windows 7 добавляет команды pushd/popd для сетевых путей, улучшенный вывод help;
- 2015 — Microsoft начинает развивать альтернативный интерпретатор PowerShell, однако cmd.exe остаётся штатным компонентом Windows.
¶Отличия от COMMAND.COM
COMMAND.COM представлял собой реальный режим MS-DOS с жёстким ограничением в 640 КБ основной памяти, поддержкой 8-разрядных программ и примитивным синтаксисом пакетных файлов. cmd.exe работает в защищённом режиме, использует 32/64-разрядные системные вызовы и поддерживает:
- длинные имена файлов с пробелами и юникодом;
- переменные окружения расширенного типа (%VAR%, !VAR! с delayed expansion);
- операторы &&, ||, |, >, >>, <, 2>, 2>&1 для управления потоками;
- вызов внешних программ без расширения .exe;
- встроенную поддержку команд копирования, перемещения, переименования файлов (copy, move, ren), не требующих внешних утилит.
¶Устройство и запуск
cmd.exe запускается как обычный процесс Win32. Путь к исполняемому файлу: %SystemRoot%\System32\cmd.exe. Основные способы запуска:
| Способ | Описание |
|---|---|
| Win+R → cmd | Запуск через диалог «Выполнить» |
| Проводник | Адресная строка: cmd |
| Панель задач | ПКМ по кнопке «Пуск» → «Терминал» (Windows 11) |
| Скрипт .bat/.cmd | Автоматический запуск интерпретатором пакетных файлов |
| Системная консоль | При запуске системных утилит из cmd.exe |
При запуске cmd.exe создаёт экземпляр консольного хоста (conhost.exe в Windows 7 и новее), который отвечает за отрисовку текстового интерфейса, шрифты, кодовые страницы и буфер прокрутки.
¶Основные возможности
¶Работа с файлами и каталогами
Ключевые встроенные команды: cd (chdir), dir, copy, xcopy, move, del, ren, mkdir (md), rmdir (rd), tree, attrib, icacls. Команды копирования и перемещения реализованы внутри самого интерпретатора, а не как отдельные утилиты.
¶Управление процессами и службами
tasklist и taskkill — просмотр и завершение процессов; sc — управление службами Windows; schtasks — планировщик задач; reg — редактор реестра из командной строки; net — управление пользователями,共享 и сессиями.
¶Пакетные файлы
Файлы с расширениями .bat (MS-DOS) и .cmd (нативные для NT) содержат последовательности команд, выполняемых cmd.exe. Поддерживаются операторы ветвления (if, goto, call), циклы (for), перенаправление ввода-вывода, конвейеры. Пакетные файлы широко используются в администрировании Windows, развёртывании программного обеспечения и автоматизации рутинных операций.
¶Кодовые страницы и локализация
По умолчанию cmd.exe использует OEM-кодовую страницу, определяемую языковыми настройками системы (для русской локализации — 866). Для смены кодировки применяется команда chcp. Начиная с Windows 10 1903, Microsoft добавила поддержку UTF-8 через chcp 65001, что улучшило отображение юникодных имён файлов.
¶Отношения с PowerShell
PowerShell — более мощный интерпретатор, основанный на .NET, с объектно-ориентированным подходом и сотнями командлетов. Несмотря на это, cmd.exe остаётся штатным компонентом всех версий Windows, поскольку:
- множество утилит и скриптов написано под его синтаксис;
- он не требует загрузки .NET-среды;
- его поведение стабильно и документировано на протяжении десятилетий.
В Windows 11 по умолчанию при нажатии Win+X открывается PowerShell, однако cmd.exe доступен через меню «Выполнить» или проводник.
¶Ограничения
- отсутствие объектной модели и работы с потоками данных;
- ограниченная обработка ошибок (errorlevel);
- нет встроенной поддержки регулярных выражений;
- слабая типизация переменных (все — строки).
¶Источники
- Microsoft Docs — «Command-Line Reference»
- «Windows Internals» Марка Руссиновича, Дэвида Соломона, Алекса Ионеску
- «Windows NT Command Line Reference», Microsoft Press
- Справка Windows: «Справочник по командной строке (Cmd)»
