30

До сих пор я никогда не думал (и никогда не замечал), что cmd и command - это две разные вещи. Ну как они?

Посмотрите на эту картинку:

На самом деле, я обычно открываю cmd из диалогового окна Run всякий раз, когда хочу использовать командную строку (для Git/ VIM). Итак, я настроил положение дисплея, шрифт, цвет и т.д. Сегодня я для изменения набрал command Run вместо cmd и обнаружил, что в моем окне что-то новое. У этого есть "ДОС" в его окне.

Итак, очевидно, что должна быть разница между cmd и command . я бы хотел знать

  1. Разница между ними.
  2. Почему Microsoft их разделила (Unix & Linux по умолчанию имеет только одну оболочку, Bash).

3 ответа3

31

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, внутренне это фактически файл Windows PE .exe . Это обеспечивает интересное наблюдение, что, хотя Windows использует расширение в качестве индикатора того, как обрабатывать большинство типов файлов, для исполняемых файлов оно игнорирует расширение и просматривает его содержимое (в противном случае .exe не будет работать, если будет рассматриваться как .com). Этот вопрос относится к этому эффекту.

8

В отличие от COMMAND.COM, которая является программой для DOS, cmd.exe является родным приложением Windows, обычно работающим в консоли Win32. Это позволяет ему использовать функции, доступные для собственных программ на платформе, которые в противном случае недоступны для программ DOS.

также...

В версиях cmd.exe как для OS/2, так и для Windows NT более подробные сообщения об ошибках, чем в окне "Плохая команда или имя файла" (в случае искаженных команд) сайта command.com.

Вот из этой информативной статьи Википедии.

Есть упоминание о том, как старые команды command.com были добавлены в новые функции cmd.exe ... например ...

функциональность deltree (command.com) была свернута в rd (cmd.exe) в виде параметра /s

Так что не стесняйтесь читать.

5

command.com - оболочка DOS, предоставленная для совместимости.

cmd.exe - это родная программа Win32, унаследованная от OS/2.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .