Was ist der Unterschied zwischen CMD und Eingabeaufforderung in Windows?

30

Bis jetzt habe ich nie gedacht (und nie beobachtet), dass cmdund commandzwei verschiedene Dinge sind. Na ja, sind sie?

Schauen Sie sich dieses Bild an:

Bildbeschreibung hier eingeben

Eigentlich öffne ich normalerweise cmdüber das Dialogfeld "Ausführen", wenn ich eine Befehlszeile verwenden möchte (für Git / VIM). Also habe ich die Anzeigeposition, Schriftart, Farbe usw. angepasst. Heute habe ich zur Abwechslung commandRun anstatt eingegeben cmdund festgestellt, dass in meinem Fenster etwas Neues ist. Es hat "DOS" in seinem Fenster.

Es sollte also offensichtlich einen Unterschied zwischen cmdund geben command. ich würde gerne wissen

  1. Der Unterschied zwischen ihnen.
  2. Warum Microsoft sie getrennt hat (Unix und Linux haben standardmäßig nur eine Shell, Bash).
Surya
quelle
11
Ich würde davon ausgehen, dass command.comes sich um die ältere 16-Bit-Version handelt (nur bei 32-Bit-Installationen verfügbar). Es existiert nicht auf meiner 64-Bit-Version von Windows 7.
Der Hochstapler
11
UNIX und Linux haben mehr als nur eine Shell zur Verfügung. Die Standard-Shell ist normalerweise Bash.
Ephsmith
@ephsmith das ist, was ich sagte ..
Surya
Beachten Sie, dass der Ausdruck "Eingabeaufforderung" technisch entweder für "command.exe" oder "cmd.exe" verwendet werden kann, in der Praxis jedoch fast immer "cmd.exe" bedeutet.
Harry Johnston
Unix hat insgesamt vier Shells, das sind csh, ksh, bash, zsh.
Deb

Antworten:

31

TL; DR

Wenn Sie ein 32-Bit-Konsolenprogramm ausführen, wird es von ausgeführt cmd. Wenn Sie ein 16-Bit-Konsolenprogramm ausführen, wird es von ausgeführt command.

Einzelheiten

Windows XP enthält ein Subsystem zur Unterstützung älterer 16-Bit-Anwendungen.

Alte 16-Bit-Anwendungen sind sowohl als DOS- als auch als Windows-Programme verfügbar. DOS-Programme sind von Natur aus Konsolenanwendungen und werden in der Eingabeaufforderung ausgeführt. 32-Bit-Windows-Konsolenanwendungen sind sich jedoch sehr ähnlich und sehen gleich aus.

Der Befehlsprozessor / Interpreter cmdhat mehrere Zwecke:

  • So führen Sie ein 32-Bit-Text-Windows-Konsolenprogramm aus
  • Zur Bereitstellung und verschiedene Kommandozeilenfunktionen (Griff dir, copyetc.)
  • Batch-Dateien interpretieren und ausführen (DOS-kompatible .batDateien und NT-kompatible .cmdDateien)

Wenn Sie ein altes 16-Bit-Konsolenprogramm ausführen, wird es von NTVDM (Windows NT Virtual DOS Machine) ausgeführt. Es bietet ein emuliertes DOS-System (daher die virtuelle DOS-Maschine ), das dem Ausführen einer dedizierten Software für virtuelle Maschinen ähnelt, mit der Ausnahme, dass die Emulationsschicht einfacher ist. commandist eine 16-Bit-Version des Befehlsinterpreters, die dem tatsächlichen DOS viel näher ist als cmd.exedas eigentliche Windows-Programm (und im Gegensatz command.comzum DOS-MZ-Header den Windows PE-Header hat).

commandhat die gleichen Zwecke wie mit der cmdAusnahme, dass es nur 16-Bit-Programme unterstützt. Darüber hinaus unterstützt es keine .cmdDateien und verfügt über weniger integrierte Befehle sowie eine eingeschränktere Syntax (es cmdist ein neuerer, modernerer und fortschrittlicherer Befehlszeileninterpreter, ähnlich wie 4DOS ).

Es werden jedoch grafische DOS-Programme (wie alte Spiele) unterstützt. Der Erfolg der Ausführung hängt jedoch von den Grafikkartentreibern und der Art des Programms ab. Es gibt zahlreiche Sites, die verschiedene Tricks anbieten , um DOS-Spiele unter Windows zum Laufen zu bringen (obwohl der Erfolg unter Vista und höher in der Regel geringer ist als unter XP).

Es ist zu beachten, dass 64-Bit-Versionen von Windows die Unterstützung von 16-Bit-Programmen vollständig eingestellt haben und daher überhaupt nicht enthalten sind command, sodass weder DOS- noch Windows-16-Bit-Programme ausgeführt werden und stattdessen eine (irreführende) Fehlermeldung ausgegeben werden .


Technische Hinweise

command.comhat eine .comErweiterung für die Abwärtskompatibilität mit DOS-Programmen, ist aber wie die meisten anderen Windows-Versionen externer DOS-Befehle intern eine Windows PE- .exeDatei. Dies liefert die interessante Beobachtung, dass Windows die Erweiterung zwar als Indikator für den Umgang mit den meisten Dateitypen verwendet, diese jedoch ignoriert und ihren Inhalt betrachtet (andernfalls .exewürde eine nicht funktionieren, wenn sie als behandelt würde .com). Diese Frage bezieht sich auf diesen Effekt.

Synetech
quelle
Natürlich können Sie von cmd.exe aus ein 32-Bit-Konsolenprogramm ausführen, dies ist jedoch nicht erforderlich. Wenn Sie auf eine ausführbare Datei im Konsolenmodus doppelklicken, wird diese nicht in cmd.exe ausgeführt. In ähnlicher Weise ist command.exe nicht wirklich dasselbe wie NTVDM.
Harry Johnston
1
Ich hasse es, einen Satz mit einem Befehlsnamen zu beginnen.
Synetech
> command.exe ist nicht wirklich dasselbe wie das NTVDM Nein, aber es ist ein Teil davon, zusammen mit mehreren DLLs (das habe ich auf die harte Tour gelernt, als ich versuchte, 16-Bit-Konsolen-Apps auf einem XP-System zum Laufen zu bringen ).
Synetech
"DOS-Programme sind von Natur aus Konsolenanwendungen " - Warum sollten Sie das sagen? Sind Nicht-Befehlszeilen-Nicht-TUI-DOS-Apps in irgendeiner Weise "unnatürlich"? :)
Karan
Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? Art von. In 9x waren sie in Ordnung, aber grafische Apps (z. B. Spiele) funktionieren unter XP + überhaupt nicht mehr ordnungsgemäß, sodass die überwiegende Mehrheit der DOS-Apps, die heutzutage (nativ) unter Windows ausgeführt werden, tatsächlich Befehlszeilentools sind vollwertige, grafische Apps. Auf 64-Bit-Computern werden 16-Bit-Apps überhaupt nicht nativ ausgeführt, aber selbst 32-Bit-Apps sind in der Regel Konsolen-Apps, zumal Vista die Unterstützung für Vollbildkonsolen eingestellt hat .
Synetech
8

Im Gegensatz zu COMMAND.COM, einem DOS-Programm, ist cmd.exe eine native Windows-Anwendung, die normalerweise in der Win32-Konsole ausgeführt wird. Auf diese Weise können Funktionen genutzt werden, die nativen Programmen auf der Plattform zur Verfügung stehen und die DOS-Programmen sonst nicht zur Verfügung stehen.

ebenfalls...

Sowohl die OS / 2- als auch die Windows NT-Version von cmd.exe enthalten detailliertere Fehlermeldungen als die Meldung "Ungültiger Befehl oder Dateiname" (bei fehlerhaften Befehlen) von command.com.

Das ist aus diesem informativen Wikipedia-Artikel.

Es wird erwähnt, wie ältere command.com-Befehle in neuere cmd.exe-Funktionen übernommen wurden ... zum Beispiel ...

Die Funktionalität von deltree (command.com) wurde in Form des Parameters / s in rd (cmd.exe) gerollt

Also, zögern Sie nicht, nachzulesen.

Bon Gart
quelle
5

command.com ist die DOS-Shell, die aus Kompatibilitätsgründen bereitgestellt wird.

cmd.exe ist ein natives Win32-Programm, das von OS / 2 geerbt wurde.

kinokijuf
quelle