Windows 批處理 .bat 和 .cmd 檔案之間的區別
使用者通常認為 COMMAND.COM
和 cmd.exe
相同。此外,他們對批處理檔案使用哪個副檔名 .bat
或 .cmd
感到困惑。
它們是相同的還是不同的,使用哪些擴充套件是否重要?本文將討論所有這些問題的答案。
當我們執行批處理檔案時,它們會在命令提示符中執行。批處理檔案主要在 Windows NT 版本的 cmd.exe
中執行。
在舊版本中,它將在 COMMAND.COM
shell 中執行。
COMMAND.COM
和 cmd.exe
之間的區別
COMMAND.COM
和 cmd.exe
是 MS-DOS 和 Windows 的命令直譯器版本。COMMAND.COM
是一個用於執行 16 位程式的命令列 shell;它是一個 DOS 程式,它是啟動後第一個執行的程式,它通過執行 AUTOEXEC.BAT
配置檔案來設定系統。
它最初於 1980 年釋出,用於 MS-DOS、Windows 95-98 和 Windows ME。它僅對設計為作為 16 位程式執行的舊程式相容和有用,並且從那時起就沒有更新。
另一方面,cmd.exe
是 COMMAND.COM
的繼承者。它是為 32 位程式設計的,於 1987 年釋出,用於 OS/2、Windows NT 和 Windows CE。
與 COMMAND.COM
相比,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
僅在發生真正錯誤時更改其狀態,即對於諸如 append
、dpath
、ftype
、set
、path
、assoc 這樣的命令
, .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
檔案:
執行 .cmd
檔案:
工作環境
.bat
檔案設計為在 NTVDM 環境中執行,這是一個在 32 位 Windows 上執行 16 位程式的 Windows 程序。NTVDM 代表 Windows NT 虛擬 DOS 機器,執行為 ntvdm.exe
。
它是系統的重要程式,為了程式的穩定執行,不應刪除它。 .bat
檔案在此環境中執行,因此在所有環境中都受支援,而 .cmd
檔案無法在 16 位環境中執行。
此外,.cmd
檔案在執行之前儲存在記憶體中,而 .bat
檔案逐行執行命令而不將它們儲存在記憶體中。
直譯器
帶有 .bat
副檔名的批處理檔案可以在 COMMAND.COM
和 cmd.exe
下執行,儘管兩個直譯器執行檔案的方式不同。 .cmd
檔案僅在 cmd.exe
中執行。
COMSPEC
環境變數用於啟動批處理檔案的命令列直譯器。預設情況下,對於舊版本(如 MS-DOS),它設定為 COMMAND.COM
。
從 Windows NT 開始,它預設為 cmd.exe
。要檢視其內容,請執行以下命令:
ECHO %COMSPEC%
因此,較新版本的 Windows 將在 cmd.exe
中執行。但在舊版本中,只會執行 .bat
檔案。
まとめ
因此,我們已經討論了批處理副檔名 .bat
和 .cmd
之間的基本關鍵區別。兩者都有各自的優勢。
總而言之,在 .bat
檔案中工作的所有內容也應該在 .cmd
檔案中工作。 .cmd
檔案比 .bat
檔案更快、更穩定。
使用正確的擴充套件取決於你的要求。但是,對於較新的版本,建議使用 .cmd
副檔名。