COMMAND.COM

Translating|:en:COMMAND.COM|tpercent=85|time=2023-03-27
command.com在Windows 95上的Windows控制台里运行（MS-DOS命令提示符）
COMMAND.COM是MS-DOS、Windows 95、Windows 98、Windows 98SE和Windows Me下默认的命令行解释器。在DOS环境下，它也是默认用户界面。它一般还是系统启动后运行的第一个程序（即init），因此负责运行AUTOEXEC.BAT配置文件以设置系统环境，也是所有进程的父进程。
COMMAND.COM在OS/2和Windows NT上的继任者是cmd.exe。即便如此，COMMAND.COM在这些系统的IA-32版本上的DOS虚拟机中仍然可用。
文件名COMMAND.COM也被de (DCP)——前东德公司VEB Robotron发行的MS-DOS变体使用。
FreeDOS下与之兼容的命令处理程序有时也称作FreeCom。
COMMAND.COM是DOS程序。由COMMAND.COM启动的程序都是DOS程序，调用DOS API与磁盘操作系统通信。

**操作模式**
作为一个用户界面，COMMAND.COM有两种截然不同的操作模式。第一种是交互模式，用户输入的指令会被立即执行；第二种是批处理模式，负责执行存储在名称以.BAT结尾文本文件中的一组预定义命令。

**Prompt内部命令**
内部命令是直接存储于COMMAND.COM二进制文件中的命令。因此，它们一直可用，但只能直接执行于命令直译器。
当Enter键在一行末尾按下后，所有命令才被执行。COMMAND.COM不区分大小写，也就是说命令可以按照任意大小写组合输入。
 BREAK: 通过C或Break控制程序中断。
 CHCP: 显示或更改当前系统的代码页。
 CHDIR, CD: 更改当前工作目录或显示当前处于的目录。
 CLS: 清除屏幕显示。
 COPY: 将一个文件复制到另一个位置（若目标文件已存在，MS-DOS会询问是否替换）。（另请参见XCOPY，一个可以复制目录树的外部命令）
 CTTY: 定义输入输出所用的设备。
 DATE: 显示和设置系统日期。
 DEL, ERASE: 删除一个文件。在对一个目录操作时，仅删除目录下的所有文件。与之相对，外部命令command不仅删除目录下的全部子目录及所有文件，也删除目录本身。
 DIR: 列出指定目录下的文件。
 ECHO: 切换文本显示开启（ECHO ON） 或关闭（ECHO OFF）。也用于在屏幕上显示字符（ECHO text）。
 EXIT: 退出COMMAND.COM并返回到启动它的程序。
 LFNFOR: 开启/关闭FOR命令返回长文件名的功能（Windows 9x）。
 LOADHIGH, LH: 将一个程序载入内存的高地址区域（相当于DR-DOS的HILOAD）。
 LOCK: 允许外部程序执行低层磁盘访问（仅MS-DOS 7.1和Windows 9x）。
 MKDIR，MD: 新建一个目录。
 PATH: 显示或更改控制COMMAND.COM查找可执行文件位置的PATH环境变量值。
 PROMPT: 显示或更改控制命令行外观的PROMPT环境变量值。
 RENAME, REN: 重命名一个文件或目录。
 RMDIR, RD: 删除一个空目录。
 SET: 设置一个环境变量的值；无参数时，显示全部已定义的环境变量。
 TIME: 显示和设置系统时间。
 TRUENAME: Display the fully expanded physical name of a file, resolving ASSIGN, JOIN and SUBST logical filesystem mappings.
 TYPE: 在控制台上显示文件内容。
 UNLOCK: 关闭低层磁盘访问（仅MS-DOS 7.1和Windows 9x）。
 VER: 显示操作系统版本。
 VERIFY: 开启/关闭文件写入验证。
 VOL:显示卷宗的信息。

**批处理命令**
控制结构多用于批处理文件中，即使也可以在交互模式下使用。
 label: 定义GOTO的目标。
 CALL: 执行另一个批处理文件，然后返回到原文件并继续。
 FOR: 迭代：为每一个特定组的文件重复一个命令。
 GOTO: 将执行过程强行跳转到一个特定标签。标签在一行的开始处指定，以冒号开始（:likethis）。
 IF: 条件语句，建立程序分支。
 PAUSE: 暂停程序执行，向用户显示消息“按任意键继续”。
 REM: 注释：此命令后所有文本被忽略。
 SHIFT: 将每个可换位参数（Replacement parameters）以其后一个替代（即用%1替代%0，用%2替代%1等）

**IF命令**
在退出的时候，所有外部命令都会向调用者给出一个介于 0 到 255 之间的返回码。绝大多数程序对于它们的返回码有一些约定，例如使用 0 表示成功执行。
如果程序是由 COMMAND.COM 调用的，那幺使用 ERRORLEVEL 作为条件句的 IF 内部命令可以用于判断最后调用的外部程序的错误状态。
在 COMMAND.COM 中，内部命令不产生新的值。

**变量**
COMMAND.COM批处理文件允许四种变量类型：- 环境变量：形如 %VARIABLE%，使用 SET 语句赋值。在 DOS 3 之前，COMMAND.COM 仅会在批处理模式中展开环境变量，或者说在命令提示符中不能使用。date=August 2017- 可换位参数：形如 %0, %1...%9，默认包含命令名称和传递给脚本的前九个命令行参数（例如，如果调用命令“myscript.bat John Doe”，那幺 %0 是 “myscript.bat”，%1 是“John”，%2 是“Doe”）。第九个之后的参数可以使用 SHIFT 语句移动到前九个的范围内。- 循环变量：在批处理文件中形如 %%a，使用于循环中。这些变量仅由一个特定的 FOR 语句定义，然后在该语句中遍历一系列给定的值。- 在 4DOS 3.00 及其后续版本和 Multiuser DOS 中，COMMAND.COM 还支持一系列System Information Variable，后来 Novell DOS 7、OpenDOS 7.01、DR-DOS 7.02 也跟进了这个功能，虽然它们所支持的变量名几乎完全不同。

**重定向、管道及连接**
由于DOS是单用户操作系统，管道由按顺序执行多个命令并重定向到临时文件（或从临时文件重定向）实现。COMMAND.COM不支持重定向到标准错误输出。 
 command  : 从一个文件或设备重定向标准输入
 command > filename : 重定向标准输出，若文件存在则覆盖目标文件
 command >> filename : 重定向标准输出，若文件存在则追加到目标文件结尾
 command1 | command2 : 将command1的标准输出管道至command2的标准输入
 command1 ¶ command2 
 由ASCII-20（¶, 用 T输入）分隔的命令将被连续执行（即命令的“连接”）。 也就是说，command1执行完毕后才会执行command2。 这是MS-DOS/PC DOS 5.0及更高的COMMAND.COM中一个未在文档中写明的功能。 这项功能也得到Windows NT系列与DR-DOS 7.07下的COMMAND.COM支持。DR-DOS下所有版本的COMMAND.COM支持一个类似的内部函数，但由感叹号 (!) 调用（一项最初由Concurrent DOS和Multiuser DOS衍生的功能）。 然而，在单用户命令行环境下，这个功能只在内部（如内置的"!DATE!TIME"启动脚本）或间接通过DOSKEY的$T参数可用，以避免因 !可作为有效文件名字符产生问题。 4DOS支持可配置的命令行分隔符（4DOS.INI CommandSep= 或 SETDOS /C）,默认为“^”。在更高版本的Windows NT下，COMMAND.COM还支持&分隔符，以提供与OS/2及Windows NT系列cmd语法的兼容性（然而cmd不支持¶分隔符）。 

**限制**
交互模式下命令行长度不得超过126字符。在MS-DOS 6.2.2中，交互模式的命令行长度限制为127字符。

**流行文化**
当终结者重新启动时，在终结者的HUD视图中和机械战警的内部视图中显示有“正在加载 COMMAND.COM”（Loading COMMAND.COM）。
在计算机制作的动画连续剧ReBoot中（该剧的背景发生在计算机内部），系统（相当于城市）的领导者被称为 COMMAND.COM。

**参见**
 UEFI#UEFI_shell（UEFI Shell参考了大量来自COMMAND.COM的指令）- IBMBIO.COM/ IO.SYS (starts the command processor as the first process)- CONFIG.SYS#SHELL (to override default command processor)- COMSPEC（由COMMAND.COM设置，reload transient portion of itself）- Environment_variable#%CMDLINE%（由COMMAND.COM设置，用于与外部程序传递较长的命令行）- 4DOS / 4DOS#NDOS （第三方的命令处理器）- DOS_Shell / ViewMAX （另一种 DOS shells）- MS-DOS命令列表- Comparison_of_command_shells- Multiuser_DOS#Concurrent_DOS/Multiuser_DOS/Multiuser_DOS#REAL/32 （有相似的命令处理器，但不叫COMMAND.COM）- PC-MOS/386 （有相似的命令处理器，也叫COMMAND.COM）- CP/M#Transient_Program_Area (TPA) (area available for use either by the running application or the transient portion of COMMAND.COM)- SpartaDOS_X （一个用于Atari电脑的相似实现）

**参考资料**

**延伸阅读**
 Cite book |author-last=Cooper |author-first=Jim |title=Special Edition Using MS-DOS 6.22 |edition=3 |date=2001 |publisher=Que Publishing |isbn=978-0-78972573-8- Cite book |author-last=Wolverton |author-first=Van |title=MS-DOS Commands: Microsoft Quick Reference |url=https://archive.org/details/msdoscommandsinc0000wolv |edition=4th revised |date=1990 |publisher=Microsoft Press |isbn=978-1-55615289-4- cite web |title=Re: Random Lockups with DR-DOS 7.03 |date=2004-06-17 |author-first=Matthias R. |author-last=Paul |work=FidoNet conference: ALT_DOS |url=https://fidonet.ozzmosis.com/echomail.php/alt_dos/e812a919c10339d0.html |access-date=2019-04-28 |url-status=dead |archive-url=https://archive.today/20190428181749/https://fidonet.ozzmosis.com/echomail.php/alt_dos/e812a919c10339d0.html |archive-date=2019-04-28 |quote=… all MS-DOS versions prior to Windows 95 … used a COM style COMMAND.COM file which has a special signature at the start of the file … queried by the MS-DOS BIOS before it loads the shell, but not by the DR-DOS BIOS … COMMAND.COM would … check that it is running on the "correct" DOS version, so if you would load their COMMAND.COM under DR-DOS, you would receive a "Bad version" error message and their COMMAND.COM would exit, so DR-DOS would … display an error message "Bad or missing command interpreter" (if DR-DOS was trying to load the SHELL= command processor after having finished CONFIG.SYS processing). In this case, you could enter the path to a valid DR-DOS COMMAND.COM (C:\DRDOS\COMMAND.COM) and everything was fine. Now, things have changed since MS-DOS 7.0 … COMMAND.COM has internally become an EXE style file, so there is no magic … signature … to check … thus no way for DR-DOS to rule out an incompatible COMMAND.COM. Further, their COMMAND.COM no longer does any version checks, but … does not work under DR-DOS … just crashes … the PC DOS COMMAND.COM works fine under DR-DOS …  

**外部连结**
  – Source code to COMMAND.COM version 2.11 released by Microsoft as part of MS-DOS 2.0-  – Source code to COMMAND.COM version 1.17 released by Microsoft as part of MS-DOS 1.25-  FreeCom date=20200225225638  – COMMAND.COM implementation of FreeDOS