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