COMMAND.COM is the default command-line interpreter for MS-DOS, Windows 95, Windows 98 and Windows Me. In the case of DOS, it is the default user interface as well. It has an additional role as the usual first program run after boot (init process). As a shell, COMMAND.COM has two distinct modes of operation: interactive mode and batch mode. Internal commands are commands stored directly inside the COMMAND.COMbinary; thus, they are always available, but can only be executed directly from the command interpreter.
COMMAND.COM is a DOS program. Programs launched from it are DOS programs that use the DOS API to communicate with the disk operating system. The compatible command processor under FreeDOS is sometimes also called FreeCom.
Operating modes
As a shell, COMMAND.COM has two distinct modes of operation. The first is interactive mode, in which the user types commands which are then executed immediately. The second is batch mode, which executes a predefined sequence of commands stored as a text file with the .BAT extension.
Internal commands
Internal commands are commands stored directly inside the COMMAND.COM binary. Thus, they are always available but can only be executed directly from the command interpreter.
All commands are executed after the ↵ Enter key is pressed at the end of the line. COMMAND.COM is not case-sensitive, meaning commands can be typed in any mixture of upper and lower case.
Copies one file to another (if the destination file already exists, MS-DOS asks whether to replace it). (See also XCOPY, an external command that could also copy directory trees).
Deletes a file. When used on a directory, deletes all files inside the directory only. In comparison, the external command DELTREE deletes all subdirectories and files inside a directory as well as the directory itself.
Toggles whether the commands executed by a batch file are displayed on screen (ECHO ON) or not (ECHO OFF). Also displays text on the screen (ECHO text).
Replaces each of the replacement parameters with the subsequent one (e.g. %0 with %1, %1 with %2, etc.).
IF command
On exit, all external commands submit a return code (a value between 0 and 255) to the calling program. Most programs have a certain convention for their return codes (for instance, 0 for a successful execution).
If a program was invoked by COMMAND.COM, the internal IF command with its ERRORLEVEL conditional can be used to test on error conditions of the last invoked external program.[citation needed]
Under COMMAND.COM, internal commands do not establish a new value.[citation needed]
Variables
Batch files for COMMAND.COM can have four kinds of variables:
Environment variables: These have the %VARIABLE% form and are associated with values with the SET statement. Before DOS 3 COMMAND.COM will only expand environment variables in batch mode; that is, not interactively at the command prompt.[citation needed]
Replacement parameters: These have the form %0, %1...%9, and initially contain the command name and the first nine command-line parameters passed to the script (e.g., if the invoking command was myscript.bat John Doe, then %0 is "myscript.bat", %1 is "John" and %2 is "Doe"). The parameters to the right of the ninth can be mapped into range by using the SHIFT statement.[citation needed]
Loop variables: Used in loops, they have the %%a format when run in batch files. These variables are defined solely within a specific FOR statement, and iterate over a certain set of values defined in that FOR statement.[citation needed]
Because DOS is a single-tasking operating system, piping is achieved by running commands sequentially, redirecting to and from temporary files.[citation needed] In DOS 2, pipe creates 2 temporary files: \%PIPE1.$$$ (input), and \%PIPE2.$$$ (output) (they get swapped after each command). COMMAND.COM makes no provision for redirecting the standard error channel.[citation needed]
Commands separated by ASCII-20 (¶, invoked by Ctrl+T) are executed in sequence (chaining of commands). In other words, first command1 is executed until termination, then command2. This is an undocumented feature in COMMAND.COM of MS-DOS/PC DOS 5.0 and higher. It is also supported by COMMAND.COM of the Windows NT family as well as by DR-DOS 7.07. All versions of DR-DOS COMMAND.COM already supported a similar internal function utilizing an exclamation mark (!) instead (a feature originally derived from Concurrent DOS and Multiuser DOS) - in the single-user line this feature was only available internally (in built-in startup scripts like "!DATE!TIME") and indirectly through DOSKEY's $T parameter to avoid problems with! as a valid filename character. 4DOS supports a configurable command line separator (4DOS.INI CommandSep= or SETDOS /C), which defaults to ^. COMMAND.COM in newer versions of Windows NT also supports an & separator for compatibility with the cmd syntax in OS/2 and the Windows NT family. (cmd does not support the ¶ separator.)
Limitations
Generally, the command line length in interactive mode is limited to 126 characters. In MS-DOS 6.22, the command line length in interactive mode is limited to 127 characters.[citation needed]
In popular culture
The message "Loading COMMAND.COM" can be seen on a HUD view of the Terminator and the internal viewport of RoboCop when he reboots.[citation needed]
In the animated children's TV series ReBoot, which takes place inside computers, the leader of a system (the equivalent of a city) is called the COMMAND.COM.