Windows批處理文件:.bat vs .cmd?


Answers

以下是本主題中各種答案和引用參考文獻的驗證信息彙編:

  1. command.com是在MS-DOS中引入的16位命令處理器,也用於Win9x系列操作系統。
  2. cmd.exe是Windows NT中的32位命令處理器(64位Windows操作系統也具有64位版本)。 cmd.exe從來不是Windows 9x的一部分。 它起源於OS / 2版本1.0, cmd的OS / 2版本開始16位(但它仍然是一個完全成熟的保護模式程序,其中包含start命令)。 Windows NT從OS / 2繼承了cmd ,但Windows NT的Win32版本從32位開始。 雖然OS / 2在1992年達到了32位,但它的cmd仍然是16位OS / 2 1.x程序。
  3. ComSpec env變量定義了由.bat.cmd腳本啟動的程序。 (從WinNT開始,這默認為cmd.exe 。)
  4. cmd.exe向後兼容command.com
  5. cmd.exe設計的腳本可命名為.cmd以防止在Windows 9x上意外執行。 這個文件擴展名也可以追溯到OS / 2版本1.0和1987。

以下列出了command.com不支持的cmd.exe功能:

  • 長文件名(超過8.3格式)
  • 命令歷史
  • Tab完成
  • 轉義字符: ^ (用於: \ & | > < ^
  • 目錄堆棧: PUSHD / POPD
  • 整數算術: SET /A i+=1
  • 搜索/替換/子字符串: SET %varname:expression%
  • 命令替換: FOR /F (之前存在,已被增強)
  • 函數: CALL :label

執行順序:

如果腳本的兩個.bat和.cmd版本(test.bat,test.cmd)位於同一個文件夾中,並且您運行的腳本沒有擴展名(測試),則默認情況下該腳本的.bat版本將運行,甚至在64位Windows 7上。執行順序由PATHEXT環境變量控制。 有關更多詳細信息,請參閱命令提示符執行文件的順序

參考文獻:

wikipedia: 比較命令外殼

Question

據我了解, .bat是舊的16位命名約定, .cmd是32位Windows,即從NT開始。 但我繼續在任何地方都看到.bat文件,而且它們似乎使用任一後綴完全相同。 假設我的代碼永遠不需要運行在比NT更早的任何東西上,那麼我命名我的批處理文件的方式真的很重要,還是有一些通過使用錯誤的後綴等待我的問題?




.cmd和.bat文件的執行方式不同,因為在.cmd錯誤級別變量中,它可以在受命令擴展影響的命令上更改。 這是真的。




稍微偏離主題,但你有沒有考慮過Windows腳本宿主 ? 你可能會發現它更好。




不,這絲毫不重要。 在NT上,.bat和.cmd擴展名都會導致cmd.exe處理器以完全相同的方式處理該文件。

有關來自MS TechNet的WinNT-class系統上的command.com與cmd.exe的其他有趣信息( http://technet.microsoft.com/en-us/library/cc723564.aspx ):

這種行為揭示了非常重要的Windows NT非常微妙的功能。 Windows NT附帶的16位MS-DOS外殼(COMMAND.COM)是專門為Windows NT設計的。 當一個命令被這個shell執行時,它並沒有真正執行它。 相反,它打包命令文本並將其發送到32位CMD.EXE命令外殼以供執行。 由於所有命令實際上都是由CMD.EXE(Windows NT命令shell)執行的,16位shell繼承了完整Windows NT shell的所有功能和工具。




作為一名Cmd程序員,並且遍布整個網絡,你使用哪一個真正無關緊要,你可以在Windows 7上有一個.bat程序,然後在Windows 10上運行它。但是如果你想讓它在Windows 10上,您可能無法在Windows 7上運行所有命令.cmd完全相同,並運行完全相同的程序和代碼。

所有不同之處在於,它是同一個程序的不同名稱,只要它連接到CMD.EXE ,它就會運行相同的命令。




由於原帖是關於使用.bat或.cmd 後綴的後果,不一定是文件的命令...

.bat和.cmd之間的另一個區別是,如果兩個文件具有相同的文件名和兩個擴展名,則:

  • 在命令行輸入文件名文件名 .bat將運行.bat文件

  • 要運行.cmd文件,您必須輸入文件名 .cmd




所有在批處理中工作的應該以cmd工作; cmd為控制環境提供了一些擴展。 而且,cmd是由新的cmd解釋器執行的,因此在NTVDM模擬的16位環境下應該更快(在短文件中不明顯)並且更穩定






Related