Windows批处理文件:.bat vs .cmd?
  据我了解, .bat是旧的16位命名约定, .cmd是32位Windows,即从NT开始。  但我继续在任何地方都看到.bat文件,而且它们似乎使用任一后缀完全相同。  假设我的代码将永远不需要对新台币任何旧的运行,是否真的重要走哪条路我名字我的批处理文件,还是有使用错误的后缀一些疑难杂症等着我? 
从Mark Zbikowski本人发布的新闻组中发现:
就CMD.EXE而言,.CMD和.BAT之间的区别是:启用了扩展,.CMD文件中的PATH / APPEND / PROMPT / SET / ASSOC将设置ERRORLEVEL而不管错误。 .BAT仅在出错时设置ERRORLEVEL。
以下是本主题中各种答案和引用参考文献的验证信息汇编:
command.com是在MS-DOS中引入的16位命令处理器,也用于Win9x系列操作系统。 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程序。 ComSpec env变量定义了由.bat和.cmd脚本启动的程序。  (从WinNT开始,这默认为cmd.exe 。) cmd.exe向后兼容command.com 。 cmd.exe设计的脚本可命名为.cmd以防止在Windows 9x上意外执行。  该文件扩展名也可以追溯到OS / 2版本1.0和1987。   以下列出了command.com不支持的cmd.exe功能: 
^ (用于:  & | > < ^ ) 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:比较命令外壳
这些答案有点太长,主要集中在交互使用方面。 重要的区别是:
.cmd防止在非NT系统上无意执行。 .cmd允许内置命令在成功时将Errorlevel更改为0。 编辑:在Windows 2000或更高版本下,命令扩展名默认处于.bat和.cmd文件中。
  在2012年及以后,我推荐独家使用.cmd 。 
上一篇: Windows batch files: .bat vs .cmd?
下一篇: Long commands split over multiple lines in Windows Vista batch (.bat) file
