据我所知,.bat是旧的16位命名约定,.cmd用于32位Windows,即从NT开始。但我仍然看到到处都有.bat文件,而且使用两个后缀时,它们的工作方式似乎完全相同。假设我的代码永远不需要在比NT更旧的软件上运行,那么我用哪种方式命名批处理文件真的很重要吗,或者使用错误的后缀会有什么问题等着我吗?


当前回答

我相信,如果将ComSpec环境变量的值更改为%SystemRoot%system32\cmd.exe(cmd),那么文件扩展名是.BAT还是.cmd都无关紧要。我不确定,但这甚至可能是WinXP及更高版本的默认值。

其他回答

差异:

.cmd文件在执行之前会加载到内存中。bat文件执行一行,读取下一行,执行该行。。。

当您执行脚本文件,然后在执行完成之前对其进行编辑时,可能会遇到这种情况。bat文件会被这个搞砸,但cmd文件不会。

这些答案有点太长,而且侧重于交互式使用。脚本编写的重要区别在于:

.cmd可防止在非NT系统上意外执行。.cmd允许内置命令在成功时将Errorlevel更改为0。

没那么令人兴奋吧?

以前,.cmd文件中启用了许多其他功能,称为“命令扩展”。但是,在Windows 2000及更高版本下,它们现在默认同时为.bat和.cmd文件启用。

一句话:在2012年及以后,我建议只使用.cmd。

我相信,如果将ComSpec环境变量的值更改为%SystemRoot%system32\cmd.exe(cmd),那么文件扩展名是.BAT还是.cmd都无关紧要。我不确定,但这甚至可能是WinXP及更高版本的默认值。

.cmd和.bat文件的执行不同,因为在.cmd错误级别变量中,它可以在受命令扩展名影响的命令上更改。这真的很重要。

由于最初的帖子是关于使用.bat或.cmd后缀的后果,所以不一定是文件中的命令。。。

.bat和.cmd之间的另一个区别是,如果存在两个具有相同文件名和两个扩展名的文件,则:

在命令行输入filename或filename.bat将运行.bat文件要运行.cmd文件,必须输入filename.cmd