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也被Disk Control Program (DCP)——前东德公司VEB Robotron发行的MS-DOS变体使用。[2]
FreeDOS下与之兼容的命令处理程序有时也称作FreeCom。
COMMAND.COM是DOS程序。由COMMAND.COM启动的程序都是DOS程序,调用DOS API与磁碟操作系统通信。
操作模式
作为一个用户界面,COMMAND.COM有两种截然不同的操作模式。第一种是交互模式,用户输入的指令会被立即执行;第二种是批处理模式,负责执行存储在名称以.BAT结尾文本文件中的一组预定义命令。
内部命令
内部命令是直接存储于COMMAND.COM二进制文件中的命令。因此,它们一直可用,但只能直接执行于命令直译器。
当↵ Enter键在一行末尾按下后,所有命令才被执行。COMMAND.COM不区分大小写,也就是说命令可以按照任意大小写组合输入。
- BREAK
- 通过Ctrl+C或Ctrl+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.[3]
- TYPE
- 在控制台上显示文件内容。
- UNLOCK
- 关闭低层磁碟访问(仅MS-DOS 7.1和Windows 9x)。
- VER
- 显示操作系统版本。
- VERIFY
- 开启/关闭文件写入验证。
- VOL
- 显示卷宗的资讯。
批处理命令
IF命令
在退出的时候,所有外部命令都会向调用者给出一个介于 0 到 255 之间的返回码。绝大多数程序对于它们的返回码有一些约定,例如使用 0 表示成功执行。[5][6][7][8]
如果程序是由 COMMAND.COM 调用的,那么使用 ERRORLEVEL 作为条件句的 IF 内部命令可以用于判断最后调用的外部程序的错误状态。
在 COMMAND.COM 中,内部命令不产生新的值。
变量
COMMAND.COM批处理文件允许四种变量类型:
- 环境变量:形如
%VARIABLE%
,使用 SET 语句赋值。在 DOS 3 之前,COMMAND.COM 仅会在批处理模式中展开环境变量,或者说在命令提示符中不能使用。[来源请求] - 可换位参数:形如
%0
,%1
...%9
,默认包含命令名称和传递给脚本的前九个命令行参数(例如,如果调用命令“myscript.bat John Doe
”,那么%0
是 “myscript.bat
”,%1
是“John
”,%2
是“Doe
”)。第九个之后的参数可以使用 SHIFT 语句移动到前九个的范围内。 - 循环变量:在批处理文件中形如
%%a
,使用于循环中。这些变量仅由一个特定的 FOR 语句定义,然后在该语句中遍历一系列给定的值。 - 在 4DOS 3.00 及其后续版本[9]和 Multiuser DOS[3] 中,COMMAND.COM 还支持一系列系统环境变量,后来 Novell DOS 7、OpenDOS 7.01、DR-DOS 7.02 也跟进了这个功能[4][10][3],虽然它们所支持的变量名几乎完全不同。
重定向、管道及连接
由于DOS是单用户操作系统,管道由按顺序执行多个命令并重定向到临时文件(或从临时文件重定向)实现。COMMAND.COM不支持重定向到标准错误输出。
command < filename
- 从一个文件或设备重定向标准输入
command > filename
- 重定向标准输出,若文件存在则覆盖目标文件
command >> filename
- 重定向标准输出,若文件存在则追加到目标文件结尾
command1 | command2
- 将command1的标准输出管道至command2的标准输入
command1 ¶ command2
- 由ASCII-20(¶, 用 Ctrl+T输入)分隔的命令将被连续执行(即命令的“连接”)。[3] 也就是说,command1执行完毕后才会执行command2。[3] 这是MS-DOS/PC DOS 5.0及更高的COMMAND.COM中一个未在文档中写明的功能。[3] 这项功能也得到Windows NT系列与DR-DOS 7.07下的COMMAND.COM支持。DR-DOS下所有版本的COMMAND.COM支持一个类似的内部函数,但由感叹号 (!) 调用(一项最初由Concurrent DOS和Multiuser DOS派生的功能)。 然而,在单用户命令行环境下,这个功能只在内部(如内建的"!DATE!TIME"启动脚本)或间接通过DOSKEY的$T参数可用,以避免因 !可作为有效文件名字符产生问题。[3] 4DOS支持可配置的命令行分隔符(4DOS.INI CommandSep= 或 SETDOS /C),默认为“^”。[9]在更高版本的Windows NT下,COMMAND.COM还支持
&
分隔符,以提供与OS/2及Windows NT系列cmd语法的兼容性(然而cmd不支持¶分隔符)。[9]
限制
交互模式下命令行长度不得超过126字符。[11][12][13]在MS-DOS 6.2.2中,交互模式的命令行长度限制为127字符。
流行文化
当终结者重新启动时,在终结者的HUD视图中和机械战警的内部视图中显示有“正在加载 COMMAND.COM”(Loading COMMAND.COM)。
在电脑制作的动画连续剧ReBoot中(该剧的背景发生在电脑内部),系统(相当于城市)的领导者被称为 COMMAND.COM。
参见
- UEFI Shell(UEFI Shell参考了大量来自COMMAND.COM的指令)
- IBMBIO.COM/ IO.SYS (starts the command processor as the first process)
- SHELL (CONFIG.SYS directive) (to override default command processor)
- COMSPEC (环境变量)(由COMMAND.COM设置,reload transient portion of itself)
- CMDLINE (环境变量)(由COMMAND.COM设置,用于与外部程序传递较长的命令行)
- 4DOS / NDOS (第三方的命令处理器)
- DOSSHELL / ViewMAX (另一种 DOS shells)
- MS-DOS命令列表
- 不同命令行的比较
- Concurrent DOS/Multiuser DOS/REAL/32 (有相似的命令处理器,但不叫COMMAND.COM)
- PC-MOS/386 (有相似的命令处理器,也叫COMMAND.COM)
- Transient Program Area (TPA) (area available for use either by the running application or the transient portion of COMMAND.COM)
- SpartaDOS X (一个用于Atari电脑的相似实现)
参考资料
延伸阅读
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.