В чем разница между CMD и командной строкой в ​​Windows?

30

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

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

введите описание изображения здесь

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

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

  1. Разница между ними.
  2. Почему Microsoft их разделила (Unix & Linux по умолчанию имеет только одну оболочку, Bash).
Surya
источник
11
Я бы предположил, command.comчто это устаревшая 16-битная версия (доступна только на 32-битных установках). Его нет в моей 64-битной версии Windows 7.
Der Hochstapler
11
UNIX и Linux имеют более чем одну доступную оболочку . Оболочкой по умолчанию обычно является Bash.
ephsmith
@ephsmith вот что я сказал ..
Сурия
Обратите внимание, что фраза «командная строка» технически может использоваться для обозначения command.exe или cmd.exe, но на практике почти всегда используется для обозначения cmd.exe.
Гарри Джонстон
Unix имеет всего четыре оболочки: это csh, ksh, bash, zsh.
Деб

Ответы:

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

Synetech
источник
Конечно, вы можете запускать 32-битную консольную программу из cmd.exe, но это не обязательно. Если дважды щелкнуть исполняемый файл в режиме консоли, он не запустится «внутри» cmd.exe. Аналогично, command.exe на самом деле не то же самое, что NTVDM.
Гарри Джонстон
1
Я ненавижу начинать предложение с имени команды.
Synetech
> command.exe на самом деле не то же самое, что NTVDM Нет, но он является его частью , вместе с несколькими библиотеками DLL (я научился этому нелегко, пытаясь заставить 16-битные консольные приложения работать в системе XP ).
Synetech
«Программы DOS по своей природе являются консольными приложениями ». Почему вы это говорите? Являются ли приложения DOS без командной строки неестественными в некотором смысле? :)
Каран
Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? Вроде. В 9x они были хорошими, но графические приложения (например, игры) больше не работают должным образом, если вообще работают в XP +, поэтому подавляющее большинство приложений DOS, которые в настоящее время работают на Windows (изначально), действительно являются инструментами командной строки, а не полнофункциональные, графические приложения. На 64-битных машин, 16-разрядные приложения не работают изначально вообще, но даже 32-разрядные приложения, как правило , консольных приложений, особенно с Vista , прекращена поддержка для полноэкранных консолей .
Synetech
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

kinokijuf
источник