TL; DR
Когда вы запускаете 32-битную консольную программу, она выполняется cmd
; когда вы запускаете 16-битную консольную программу, она выполняется command
.
Детали
Windows XP включает подсистему для поддержки старых 16-разрядных приложений.
Старые 16-битные приложения доступны как для DOS, так и для Windows. Программы DOS по своей природе являются консольными приложениями и выполняются в том, что похоже на командную строку. Однако 32-разрядные консольные приложения Windows очень похожи и выглядят одинаково.
Командный процессор / интерпретатор cmd
имеет несколько целей:
- Выполнить 32-битную текстовую консольную программу Windows
- Предоставлять и обрабатывать различные функции командной строки (
dir
, copy
и т. Д.)
- Интерпретация и выполнение командных файлов (DOS-совместимых
.bat
файлов и NT-совместимых .cmd
файлов)
Когда вы запускаете старую 16-разрядную консольную программу, она выполняется NTVDM (Windows NT Virtual DOS Machine). Он предоставляет эмулируемую систему DOS (следовательно, виртуальную машину DOS ), которая аналогична запуску программного обеспечения для выделенной виртуальной машины, за исключением того, что уровень эмуляции проще. command
это 16-битная версия интерпретатора команд, которая намного ближе к реальной DOS, чем на cmd.exe
самом деле программа Windows (и имеет заголовок Windows PE, в отличие от command.com
которого заголовок DOS MZ).
command
имеет те же цели, cmd
за исключением того, что поддерживает только 16-битные программы. Кроме того, он не поддерживает .cmd
файлы и имеет меньше встроенных команд и более ограничен в своем синтаксисе ( cmd
это более новый, более современный, более продвинутый интерпретатор командной строки, похожий на 4DOS ).
Тем не менее, он поддерживает графические программы для DOS (например, старые игры), но успешность их запуска зависит от драйверов видеокарты и характера программы. Существует множество сайтов, предлагающих различные приемы, позволяющие запускать игры для DOS в Windows (хотя успех в Vista и выше обычно более ограничен, чем в XP).
Следует отметить, что 64-разрядные версии Windows полностью отказались от поддержки 16-разрядных программ и поэтому вообще не включают их command
, поэтому ни DOS, ни 16-разрядные программы Windows не будут запускаться и вместо этого будут выдавать (вводящее в заблуждение) сообщение об ошибке ,
Технические примечания
command.com
имеет .com
расширение для обратной совместимости с программами DOS, но, как и большинство других версий Windows для внешних команд DOS, внутренне это фактически .exe
файл Windows PE . Это обеспечивает интересное наблюдение, что, хотя Windows использует расширение в качестве индикатора того, как обрабатывать большинство типов файлов, для исполняемых файлов оно игнорирует расширение и просматривает его содержимое (в противном случае .exe
оно не будет работать, если будет рассматриваться как .com
). Этот вопрос относится к этому эффекту.
command.com
что это устаревшая 16-битная версия (доступна только на 32-битных установках). Его нет в моей 64-битной версии Windows 7.