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功能:

  • 长文件名(超过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环境变量控制。 有关更多详细信息,请参阅命令提示符执行文件的顺序。

    参考文献:

  • CMD.EXE
  • command.com
  • wikipedia:比较命令外壳


    这些答案有点太长,主要集中在交互使用方面。 重要的区别是:

  • .cmd防止在非NT系统上无意执行。
  • .cmd允许内置命令在成功时将Errorlevel更改为0。
  • 编辑:在Windows 2000或更高版本下,命令扩展名默认处于.bat和.cmd文件中。

    在2012年及以后,我推荐独家使用.cmd

    链接地址: http://www.djcxy.com/p/16435.html

    上一篇: Windows batch files: .bat vs .cmd?

    下一篇: Long commands split over multiple lines in Windows Vista batch (.bat) file