跳转到内容

COMMAND.COM

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Polygon1024留言 | 贡献2021年4月29日 (四) 07:40 IF命令:​ 翻译内容)编辑。这可能和当前版本存在着巨大的差异。

COMMAND.COM
Windows 8上的COMMAND.COM
Windows 8上的COMMAND.COM
其他名称MS-DOS Prompt,
Windows Command Interpreter
開發者Seattle Computer Products, IBM, Microsoft, The Software Link, Datalight, Novell, Caldera
首次发布1980年,​44年前​(1980
编程语言x86 汇编语言[1]
操作系统
平台16位 x86
繼任cmd.exe
类型Command-line interpreter
command.com running in a Windows console on Windows 95 (MS-DOS Prompt)

COMMAND.COM是MS-DOSWindows 95Windows 98Windows 98SEWindows Me下默认的命令行直译器。在DOS环境下,它也是默认用户界面。它一般还是系统启动后运行的第一个程序(即init),因此负责运行AUTOEXEC.BAT配置文件以设置系统环境,也是所有进程的父进程。

COMMAND.COM在OS/2Windows 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+CCtrl+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-DOSHILOAD)。
LOCK
允许外部程序执行低层磁盘访问(仅MS-DOS 7.1Windows 9x)。
MKDIR
新建一个目录。
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
显示卷宗的信息。

批处理命令

控制结构多用于批处理文件中,即使也可以在交互模式下使用。[4][3]

:label
定义GOTO的目标。
CALL
执行另一个批处理文件,然后返回到原文件并继续。
FOR
迭代:为每一个特定组的文件重复一个命令。
GOTO
将执行过程强行跳转到一个特定标签。标签在一行的开始处指定,以冒号开始(:likethis)。
IF
条件语句,建立程序分支。
PAUSE
暂停程序执行,向用户显示消息“按任意键继续”。
REM
注释:此命令后所有文本被忽略。
SHIFT
Replaces each of the replacement parameters with the subsequent one (e.g. %0 with %1, %1 with %2, etc.命令

IF命令

在退出的时候,所有外部命令都会向调用者给出一个介于 0 到 255 之间的返回码。绝大多数程序对于它们的返回码有一些约定,例如使用 0 表示成功执行。[5][6][7][8]

如果程序是由 COMMAND.COM 调用的,那么使用 ERRORLEVEL 作为条件句的 IF 内部命令可以用于判断最后调用的外部程序的错误状态。

在 COMMAND.COM 中,内部命令不产生新的值。

变量

COMMAND.COM批处理文件允许四种变量类型:

  • 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.[來源請求]
  • 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.
  • 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.
  • Under Novell DOS 7, OpenDOS 7.01, DR-DOS 7.02 and higher, COMMAND.COM also supports a number of system information variables,[4][9][3] a feature earlier found in 4DOS 3.00 and higher[10] as well as in Multiuser DOS,[3] although most of the supported variable names differ.

Redirection, piping, and chaining

Because DOS is a single-tasking operating system, piping is achieved by running commands sequentially, redirecting to and from a temporary file. COMMAND.COM makes no provision for redirecting the standard error channel.

command < filename
Redirect standard input from a file or device
command > filename
Redirect standard output, overwriting target file if it exists.
command >> filename
Redirect standard output, appending to target file if it exists.
command1 | command2
Pipe standard output from command1 to standard input of command2
command1command2
Commands separated by ASCII-20 (¶, invoked by Ctrl+T) are executed in sequence (chaining of commands).[3] In other words, first command1 is executed until termination, then command2.[3] This is an undocumented feature in COMMAND.COM of MS-DOS/PC DOS 5.0 and higher.[3] 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) - however, 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.[3] 4DOS supports a configurable command line separator (4DOS.INI CommandSep= or SETDOS /C), which defaults to ^.[10] 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.[10] (cmd, however, does not support the ¶ separator.)

限制

交互模式下命令行长度不得超过126字符。[11][12][13]

The message "Loading COMMAND.COM" can be seen on a HUD view of the Terminator and the internal viewport of RoboCop when he reboots.

In the CGI 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.

See also

References

  1. ^ MS-DOS/COMMAND.ASM at master · microsoft/MS-DOS · GitHub
  2. ^ Kurth, Rüdiger; Groß, Martin; Hunger, Henry. Betriebssystem DCP. www.robotrontechnik.de. 2016-11-29 [2007] [2019-04-28]. (原始内容存档于2019-04-03) (德语). 
  3. ^ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Paul, Matthias R. NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds. MPDOSTIP. Release 157 3. 1997-07-30 [1994-05-01] [2014-08-06]. (原始内容存档于4 November 2016) (德语).  (NB. The provided link points to a HTML-converted version of the NWDOSTIP.TXT, which is part of the MPDOSTIP.ZIP collection.) [1]
  4. ^ 4.0 4.1 Chapter 7: Batch Processing. Caldera DR-DOS 7.02 User Guide. Caldera, Inc. 1998 [1993, 1997] [2017-09-11]. (原始内容存档于2017-09-11). 
  5. ^ Paul, Matthias R. BATTIPs — Tips & Tricks zur Programmierung von Batchjobs. MPDOSTIP. 1997-05-01. Kapitel 7: ERRORLEVEL abfragen [1993-10-01] [2017-08-23]. (原始内容存档于2017-08-23) (德语).  (NB. BATTIPS.TXT is part of MPDOSTIP.ZIP. The provided link points to a HTML-converted older version of the BATTIPS.TXT file.) [2]
  6. ^ Auer, Eric; Paul, Matthias R.; Hall, Jim. MS-DOS errorlevels. 2015-12-24 [2003-12-31]. (原始内容存档于2015-12-24). 
  7. ^ Paul, Matthias R. Auer, Eric , 编. Exitcodes (errorlevels) of DOS utilities. 2003 [1997] [2017-09-11]. (原始内容存档于11 September 2017).  [3]
  8. ^ Allen, William; Allen, Linda. Windows 95/98/ME ERRORLEVELs. (原始内容存档于2005-10-29). 
  9. ^ Caldera DR-DOS 7.02 User Guide. Caldera, Inc. 1998 [1993, 1997] [2013-08-10]. (原始内容存档于2016-11-04). 
  10. ^ 10.0 10.1 10.2 Brothers, Hardin; Rawson, Tom; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. 4DOS 8.00 online help. 2002-02-27. […] Multiple Commands: You can type several commands on the same command line, separated by a caret [^]. For example, if you know you want to copy all of your .TXT files to drive A: and then run CHKDSK to be sure that drive A's file structure is in good shape, you could enter the following command: C:\>COPY *.TXT A: ^ CHKDSK A: You may put as many commands on the command line as you wish, as long as the total length of the command line does not exceed 511 characters. You can use multiple commands in aliases and batch files as well as at the command line. If you don't like using the default command separator, you can pick another character using the SETDOS /C command or the CommandSep directive in 4DOS.INI. […] SETDOS /C: (Compound character) This option sets the character used for separating multiple commands on the same line. The default is the caret [^]. You cannot use any of the redirection characters [<>|], or the blank, tab, comma, or equal sign as the command separator. The command separator is saved by SETLOCAL and restored by ENDLOCAL. This example changes the separator to a tilde [~]: C:\>SETDOS /C~ (You can specify either the character itself, or its ASCII code as a decimal number, or a hexadecimal number preceded by 0x.) […] CommandSep = c (^): This is the character used to separate multiple commands on the same line. […] Special Character Compatibility: If you use two or more of our products, or if you want to share aliases and batch files with users of different products, you need to be aware of the differences in three important characters: the Command Separator […], the Escape Character […], and the Parameter Character […]. The default values of each of these characters in each product is shown in the following chart: […] Product, Separator, Escape Parameter […] 4DOS: ^, ↑, & […] 4OS2, 4NT, Take Command: &, ^, $ […] (The up-arrow [↑] represents the ASCII Ctrl-X character, numeric value 24.) […] 
  11. ^ Paul, Matthias R. MSDOSTIPs — Tips für den Umgang mit MS-DOS 5.0-7. MPDOSTIP. 1997-07-01 [1994-01-01] [2013-10-25]. (原始内容存档于2017-08-22) (德语).  (NB. MSDOSTIP.TXT is part of MPDOSTIP.ZIP, maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the MSDOSTIP.TXT file.) [4]
  12. ^ Paul, Matthias R. Hinweise zu JPSofts 4DOS 5.5b/c, 5.51, 5.52a und NDOS. MPDOSTIP. 1997-05-01 [1995-03-01] [2015-05-08]. (原始内容存档于2016-11-04) (德语).  (NB. The provided link points to a HTML-converted version of the 4DOS5TIP.TXT file, which is part of the MPDOSTIP.ZIP collection.) [5]
  13. ^ Schulman, Andrew; Brown, Ralf D.; Maxey, David; Michels, Raymond J.; Kyle, Jim. Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1需要免费注册 2. Reading, Massachusetts, USA: Addison Wesley. 1994: 623, 626 [November 1993]. ISBN 0-201-63287-X.  (xviii+856+vi pages, 3.5"-floppy) Errata: [6][7]

Further reading

  • Cooper, Jim. Special Edition Using MS-DOS 6.22 3. Que Publishing. 2001. ISBN 978-0-78972573-8. 
  • Wolverton, Van. MS-DOS Commands: Microsoft Quick Reference 4th revised. Microsoft Press. 1990. ISBN 978-1-55615289-4. 
  • Paul, Matthias R. Re: Random Lockups with DR-DOS 7.03. FidoNet conference: ALT_DOS. 2004-06-17 [2019-04-28]. (原始内容存档于2019-04-28). […] 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 […]  |number=被忽略 (帮助) [8][9]
  • GitHub上的COMMAND.ASM頁面 – Source code to COMMAND.COM version 2.11 released by Microsoft as part of MS-DOS 2.0
  • GitHub上的COMMAND.ASM頁面 – Source code to COMMAND.COM version 1.17 released by Microsoft as part of MS-DOS 1.25
  • FreeCom – COMMAND.COM implementation of FreeDOS