# COMMAND.COM

Die COMMAND.COM ist die Shell der Betriebssysteme MS-DOS und PC DOS sowie der darauf aufbauenden Windows-Systeme der Windows-9x-Reihe.
Die Programmdatei COMMAND.COM wurde von Tim Paterson in 86-DOS eingeführt, welches von Microsoft übernommen worden ist. Neben der Variante von Microsoft gab oder gibt es auch Entsprechungen in den MS-DOS-kompatiblen Betriebssystemen, darunter etwa das bis heute weiterentwickelte FreeCOM aus dem quelloffenen Projekt FreeDOS oder der Kommandozeileninterpreter, den der ehemalige Microsoft-Konkurrent Digital Research mit seinem DR DOS mitlieferte. Es gibt auch Varianten wie 4DOS, die nicht Bestandteil eines Betriebssystems sind, sondern den Interpreter eines Systems ersetzen und erweiterte Funktionen bieten.

## Funktion und Befehle
### Funktion des Interpreters

Funktionell entspricht die COMMAND.COM dem Console Command Processor (CCP) von CP/M, welches Tim Paterson bei der Entwicklung von 86-DOS als Vorbild diente. In dieser Funktion bildet COMMAND.COM in MS-DOS und dazu dazu kompatiblen DOS als Kommandozeileninterpreter die im Betriebssystem enthaltene Schnittstelle zum Benutzer. COMMAND.COM interpretiert die Eingabe des Benutzers und führt daraufhin interne Kommandos aus oder versucht, ein anderes Programm aufzurufen. Ebenfalls von COMMAND.COM wird deswegen die für DOS typische Eingabeaufforderung (englisch Prompt) angezeigt – für gewöhnlich der aktuelle Verzeichnispfad, gefolgt von einem Größer-als-Zeichen, im Standard-Textmodus Weiß auf Schwarz.
Da die COMMAND.COM nicht Teil des DOS-Kernels, MSDOS.SYS bei MS-DOS, sondern als eigenes Programm ausgeführt ist, könnte ein DOS-System theoretisch auch ohne COMMAND.COM oder Entsprechung genutzt werden; ohne jede Eingabemöglichkeit oder ausreichende Automatisierung hätte dies aber keinen sinnvollen Nutzen. In späteren DOS-Versionen ist COMMAND.COM austauschbar: durch Angabe von SHELL= in der CONFIG.SYS kann die primäre Shell nicht nur durch einen anderen Kommandozeileninterpreter ersetzt werden, sondern prinzipiell durch jedes unter DOS ausführbare Programm (vgl. Kiosk-Modus). Eine andere Variante, die COMMAND.COM zu ersetzen, besteht darin, lediglich dem Alternativprogramm diesen Namen zu geben – das System führt dann weiterhin die Datei COMMAND.COM aus, ohne zu merken, dass eigentlich die gewünschte Alternative ausgeführt wird. (Da sich die Ausführung einer COM- und einer EXE-Datei nicht unterscheiden, stört es nicht, wenn der Name des anderen Programms ursprünglich die Dateiendung .EXE hatte.)
Wenn in der CONFIG.SYS nicht anderes angegeben ist, führt die COMMAND.COM bei ihrem ersten Aufruf automatisch AUTOEXEC.BAT aus, falls die Datei vorhanden ist.

### Aufbau von Befehlen

Bei den für COMMAND.COM verfügbaren Befehlen bzw. Kommandos wird zwischen internen und externen Kommandos unterschieden. Als interne Kommandos werden die im Kommandozeileninterpreter selbst enthaltenen Befehle bezeichnet; externe Kommandos hingegen sind eigenständige Programme, die aus eigenen Programmdateien (ausführbare COM- oder EXE-Dateien) bestehen.
Die COMMAND.COM von MS-DOS 5.0, eingeführt im Sommer 1991, kennt 29 interne Befehle.
Zu den ausführbaren Dateien kommen die vom Kommandozeileninterpreter COMMAND.COM unterstützten Stapelverarbeitungsdateien hinzu, auch Batch-Dateien oder Batches genannt, mit der Dateinamenserweiterung .BAT. Die darin enthaltenen Zeilen werden vom Kommandozeileninterpreter nacheinander – wie von einem „Stapel“ – abgearbeitet. Stapelverarbeitungen können alle auch auf der Kommandozeile (dem „Prompt“ bzw. der Eingabeaufforderung) möglichen Eingaben, auch alle internen oder externen Kommandos, enthalten. Damit verhalten sich Stapelverarbeitungsdateien wie „echte Programme“ und werden oft auch so aufgerufen, sind aber den Interpreter-Skriptsprachen zuzuordnen.
Ein Kommando wird aufgerufen, indem der Name dieses Kommandos eingegeben wird. Sobald die Befehlseingabe mit der Eingabetaste (Enter oder Return) beendet wurde, sucht COMMAND.COM nach einem passenden internen Befehl. Wird kein interner Befehl gefunden, so wird zunächst im aktuellen Verzeichnis, dem Arbeitsverzeichnis, nach ausführbaren Dateien gesucht, die den eingegebenen Befehl als Dateinamen tragen, wobei die Dateinamenserweiterung weggelassen werden kann. Falls so kein passendes Programm gefunden wurde, wird zuletzt jeder Ordner im Suchpfad (engl. PATH) durchsucht. Das erste gegebenenfalls gefundene Programm wird ausgeführt, andernfalls wird eine Fehlermeldung angezeigt, und die Eingabeaufforderung erscheint wieder.
Kommandos können entweder einzeln oder gefolgt von (auch als Argumente bekannten) sogenannten Kommandozeilenparametern aufgerufen werden. Diese Parameter werden je nach Befehl oder Programm unterschiedlich interpretiert und können verschiedenste Optionen festlegen. Ein Parameter (manchmal auch Schalter genannt), den fast jeder Befehl in DOS kennt, und der für gewöhnlich eine kurze Direkthilfe ausgibt, lautet beispielsweise /?. Im Gegensatz zu Programmen, die sich nur über Parameter steuern lassen, gibt es auch solche, die ohne Parameter aufgerufen werden und dem Benutzer danach selbst die nötigen Eingabemöglichkeiten bieten. Dazu zählen auch die verschiedenen grafischen Benutzeroberflächen, die von der DOS-Kommandozeilenoberfläche gestartet werden können, zum Beispiel Windows 1.x bis 3.x (in Windows 4.x ist MS-DOS, und damit auch die COMMAND.COM, integriert) oder die Versionen von GEM für DOS.
Unter MS-DOS 6.22 beträgt die maximale Länge eines Befehls auf der Eingabeaufforderung 127 Zeichen.

## Andere Verwendung und Zukunft
### Microsoft Windows
#### MS-DOS-Eingabeaufforderung

Unter den inzwischen veralteten DOS-basierten Windows-Versionen wird die COMMAND.COM aus dem sowieso benötigten DOS-System (welches ab Windows 95 auch enthalten ist) dazu benutzt, eine Eingabeaufforderung in einem „Fenster“ der Benutzeroberfläche bereitzustellen. Zwar ist dem zugrundeliegenden DOS-Betriebssystem kein Alleinzugriff auf die Hardware mehr möglich, es können aber noch alle Funktionen des Interpreters uneingeschränkt genutzt werden.
Microsoft nannte diese Kommandozeilenoberfläche damals MS-DOS-Eingabeaufforderung, allerdings ist der Begriff fälschlicherweise auch heute noch vielen Anwendern ein Synonym für textbasierte Eingaben in Windows-Betriebssystemen.

#### cmd.exe

Windows NT und alle Nachfolger bis hin zum aktuellen Microsoft-Betriebssystem Windows 11 setzen einen neuen, leistungsfähigeren und weitgehend abwärtskompatiblen Kommandozeileninterpreter namens cmd.exe ein. Viele in der ursprünglichen COMMAND.COM fehlende Funktionen, die früher nur durch Programme von Drittherstellern bereitgestellt werden konnten, sind in cmd.exe enthalten. So können zum Beispiel einfache Berechnungen durchgeführt werden, und das Entfernen bestimmter Zeichen aus einer Variable ist möglich. Zudem wird die cmd.exe mit der fortschreitenden Entwicklung von Windows-NT-basierten Betriebssystemen ebenfalls noch weiterentwickelt, während die COMMAND.COM von Microsoft (zumindest als Standard-Kommandozeileninterpreter) in Windows ME ihr endgültig letztes Auftreten hatte. Im Gegensatz zu COMMAND.COM bei MS-DOS und Kompatiblen wird cmd.exe nur benötigt, um Kommandozeilenbefehle in der Konsole, bereitgestellt durch conhost.exe, entgegenzunehmen und Stapelverarbeitungsdateien auszuführen.
Neben dem Standard-Kommandozeileninterpreter cmd.exe bieten Windows NT und Nachfolger – sofern auf 32-Bit-Basis implementiert – allerdings auch noch einen kompatibleren Ersatz-Interpreter, der ebenfalls COMMAND.COM heißt. Zwar erfüllt er die gleiche Funktion wie die COMMAND.COM aus MS-DOS und älteren Windows-Versionen, ist aber eine richtige Windows-Anwendung. Alle 16-Bit-Funktionen werden durch COMMAND.COM und die virtuelle DOS-Umgebung (eng. Virtual DOS Machine, abgekürzt VDM) lediglich bereitgestellt. Nachteilig wirkt sich aus, dass die COMMAND.COM aus Windows NT dem Interpreter aus den MS-DOS-Versionen 5 und 6 mehr entspricht, als dem, der in Windows 95, 98 und Me zum Einsatz kam. Damit gehen auch einige Verbesserungen verloren, zum Beispiel die mögliche Nutzung von langen Dateinamen mit mehr als acht Zeichen und Dateiendungen mit mehr als drei Zeichen.

### FreeCOM

Im Betriebssystem FreeDOS ist der Kommandozeileninterpreter FreeCOM enthalten. FreeCOM und FreeDOS werden – im Gegensatz zu MS-DOS, DR-DOS und den meisten anderen DOS-Betriebssystemen und/oder -Kommandozeileninterpretern – noch immer weiterentwickelt. Ähnlich cmd.exe bietet auch FreeCOM einige Erweiterungen zum MS-DOS-Interpreter, ist dabei aber mehr auf Kompatibilität ausgerichtet. So werden beispielsweise Stapelverarbeitungsdateien aus MS-DOS meist auch ohne Anpassungen korrekt von FreeCOM interpretiert.