COMMAND.COM
其他名稱 | MS-DOS Prompt, Windows Command Interpreter |
---|---|
開發者 | Seattle Computer Products, IBM, Microsoft, The Software Link, Datalight, Novell, Caldera |
首次發布 | 1980年 |
編程語言 | x86 匯編語言[1] |
操作系統 | |
平台 | 16位 x86 |
繼任 | cmd.exe |
類型 | 命令行解釋器 |
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
- 顯示卷宗的信息。
批處理命令
[編輯]控制結構多用於批處理文件中,即使也可以在交互模式下使用。[4][3]
- :label
- 定義GOTO的目標。
- CALL
- 執行另一個批處理文件,然後返回到原文件並繼續。
- FOR
- 迭代:為每一個特定組的文件重複一個命令。
- GOTO
- 將執行過程強行跳轉到一個特定標籤。標籤在一行的開始處指定,以冒號開始(
:likethis
)。 - IF
- 條件語句,建立程序分支。
- PAUSE
- 暫停程序執行,向用戶顯示消息「按任意鍵繼續」。
- REM
- 注釋:此命令後所有文本被忽略。
- SHIFT
- 將每個可換位參數(Replacement parameters)以其後一個替代(即用
%1
替代%0
,用%2
替代%1
等)
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電腦的相似實現)
參考資料
[編輯]- ^ MS-DOS/COMMAND.ASM at master · microsoft/MS-DOS · GitHub. [2021-04-23]. (原始內容存檔於2021-02-27).
- ^ Kurth, Rüdiger; Groß, Martin; Hunger, Henry. Betriebssystem DCP. www.robotrontechnik.de. 2016-11-29 [2007] [2019-04-28]. (原始內容存檔於2019-04-03) (德語).
- ^ 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]. (原始內容存檔於2016-11-04) (德語). (NB. The provided link points to a HTML-converted version of the
NWDOSTIP.TXT
, which is part of theMPDOSTIP.ZIP
collection.) [1] - ^ 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).
- ^ 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]
- ^ Auer, Eric; Paul, Matthias R.; Hall, Jim. MS-DOS errorlevels. 2015-12-24 [2003-12-31]. (原始內容存檔於2015-12-24).
- ^ Paul, Matthias R. Auer, Eric , 編. Exitcodes (errorlevels) of DOS utilities. 2003 [1997] [2017-09-11]. (原始內容存檔於2017-09-11). [3]
- ^ Allen, William; Allen, Linda. Windows 95/98/ME ERRORLEVELs. (原始內容存檔於2005-10-29).
- ^ 9.0 9.1 9.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.) […] - ^ Caldera DR-DOS 7.02 User Guide. Caldera, Inc. 1998 [1993, 1997] [2013-08-10]. (原始內容存檔於2016-11-04).
- ^ 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]
- ^ 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 theMPDOSTIP.ZIP
collection.) [5] - ^ 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]
延伸閱讀
[編輯]- 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 […]
[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