Windows 批處理 .bat 和 .cmd 檔案之間的區別

Siddharth Bishnoi 2023年1月30日
  1. COMMAND.COMcmd.exe 之間的區別
  2. Windows Batch .bat.cmd 檔案之間的主要區別
  3. まとめ
Windows 批處理 .bat 和 .cmd 檔案之間的區別

使用者通常認為 COMMAND.COMcmd.exe 相同。此外,他們對批處理檔案使用哪個副檔名 .bat.cmd 感到困惑。

它們是相同的還是不同的,使用哪些擴充套件是否重要?本文將討論所有這些問題的答案。

當我們執行批處理檔案時,它們會在命令提示符中執行。批處理檔案主要在 Windows NT 版本的 cmd.exe 中執行。

在舊版本中,它將在 COMMAND.COM shell 中執行。

COMMAND.COMcmd.exe 之間的區別

COMMAND.COMcmd.exe 是 MS-DOS 和 Windows 的命令直譯器版本。COMMAND.COM 是一個用於執行 16 位程式的命令列 shell;它是一個 DOS 程式,它是啟動後第一個執行的程式,它通過執行 AUTOEXEC.BAT 配置檔案來設定系統。

它最初於 1980 年釋出,用於 MS-DOS、Windows 95-98 和 Windows ME。它僅對設計為作為 16 位程式執行的舊程式相容和有用,並且從那時起就沒有更新。

command.com

另一方面,cmd.exeCOMMAND.COM 的繼承者。它是為 32 位程式設計的,於 1987 年釋出,用於 OS/2、Windows NT 和 Windows CE。

COMMAND.COM 相比,cmd.exe 提供了更好的擴充套件,例如詳細的錯誤資訊,支援箭頭鍵檢視命令歷史,支援延遲變數擴充套件,並改進了內部命令。

cmd.exe

批處理檔案是一個指令碼檔案,可以儲存命令並由命令列直譯器按序列順序執行。 .bat 副檔名用於 MS-DOS 和 Windows,它是第一個用於批處理檔案的副檔名,而 .cmd 用於 Windows NT 系列和 OS/2。

.cmd 檔案只能在 cmd.exe 中執行,因為 COMMAND.COM 無法識別此副檔名。

本教程將說明 .bat.cmd 檔案之間的主要區別。

Windows Batch .bat.cmd 檔案之間的主要區別

.bat.cmd 之間的主要關鍵區別將在下面討論。

ERRORLEVEL 處理

.bat.cmd 以不同方式處理 ERRORLEVEL 變數。當呼叫 ERRORLEVEL 時,.bat 僅在發生真正錯誤時更改其狀態,即對於諸如 appenddpathftypesetpathassoc 這樣的命令 , .bat 不會設定 ERRORLEVEL。

但是,在 .cmd 的情況下,它會設定 ERRORLEVEL,而不考慮真正的錯誤。即使成功執行,它也會將 ERRORLEVEL 重置為 0。

有時,它在編寫指令碼時會造成混亂,因此使用者應該小心這一點。

執行順序

環境變數 PATHEXT 控制執行順序。執行取決於儲存在 PATHEXT 變數中的變數的順序。

如果 .bat.cmd 指令碼都儲存在同一個資料夾中,執行不帶副檔名的指令碼將首先執行 .bat 檔案,然後執行 ​​.cmd 檔案。PATHEXT 變數的預設順序如下:

ECHO %PATHEXT%

路徑下變數

但是,你可以更改 PATHEXT 變數中的擴充套件順序。即使你刪除了 PATHEXT 變數,其順序也將與 Windows 的 MS-DOS 版本相同。

支援

關於對 Windows 版本的支援,幾乎所有 Windows 版本都支援 .cmd 檔案,這與 .bat 檔案的情況不同。 .bat 最初是為 MS-DOS 開發的,而 .cmd 是為 Windows NT 開發的,因此 .cmd 檔案不能在非 Windows NT 系統中執行。

.bat 的指令碼比 .cmd 更舊。與 .bat 檔案相比,.cmd 向後相容。

安全

關於安全性,.cmd.bat 更安全。由於 .bat 檔案中的命令是以序列方式儲存的,並且是逐行執行的,因此更容易受到安全攻擊。 .cmd 檔案不按順序執行命令,因此它們比 .bat 檔案更安全。

.cmd 檔案也可以通過允許檢視、安裝和執行 .cmd 檔案的應用程式在 Android 中使用。Android 不支援 .bat 檔案。

.bat 檔案具有舊版本的 Microsoft 語言,因為它是早期為 MS-DOS 開發的。 .cmd 是為較新版本的 Windows 開發的程式語言和直譯器。

當你執行沒有任何副檔名的批處理檔案時,它將以 .bat 執行,而對於 .cmd 副檔名,你必須輸入檔名作為 filename.cmd。這種情況僅適用於兩個副檔名具有相同檔名的情況; .cmd 需要提供副檔名來執行檔案,而 .bat 檔案直接執行程式而不需要副檔名。

如下圖所示,我們有兩個具有相同檔名 testfile 和不同副檔名 .bat.cmd 的批處理檔案。 .bat 檔案儲存為 Windows 批處理檔案,.cmd 儲存為 Windows 命令指令碼。

具有相同檔名的批處理檔案

執行 .bat 檔案:

執行 bat 檔案

執行 .cmd 檔案:

執行 cmd 檔案

工作環境

.bat 檔案設計為在 NTVDM 環境中執行,這是一個在 32 位 Windows 上執行 16 位程式的 Windows 程序。NTVDM 代表 Windows NT 虛擬 DOS 機器,執行為 ntvdm.exe

它是系統的重要程式,為了程式的穩定執行,不應刪除它。 .bat 檔案在此環境中執行,因此在所有環境中都受支援,而 .cmd 檔案無法在 16 位環境中執行。

此外,.cmd 檔案在執行之前儲存在記憶體中,而 .bat 檔案逐行執行命令而不將它們儲存在記憶體中。

直譯器

帶有 .bat 副檔名的批處理檔案可以在 COMMAND.COMcmd.exe 下執行,儘管兩個直譯器執行檔案的方式不同。 .cmd 檔案僅在 cmd.exe 中執行。

COMSPEC 環境變數用於啟動批處理檔案的命令列直譯器。預設情況下,對於舊版本(如 MS-DOS),它設定為 COMMAND.COM

從 Windows NT 開始,它預設為 cmd.exe。要檢視其內容,請執行以下命令:

ECHO %COMSPEC%

compspec 變數

因此,較新版本的 Windows 將在 cmd.exe 中執行。但在舊版本中,只會執行 .bat 檔案。

まとめ

因此,我們已經討論了批處理副檔名 .bat.cmd 之間的基本關鍵區別。兩者都有各自的優勢。

總而言之,在 .bat 檔案中工作的所有內容也應該在 .cmd 檔案中工作。 .cmd 檔案比 .bat 檔案更快、更穩定。

使用正確的擴充套件取決於你的要求。但是,對於較新的版本,建議使用 .cmd 副檔名。