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


当前回答

扩展没有什么区别。

COMMAND.COM处理文件与CMD.EXE略有不同。

其他回答

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

差异:

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

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

不,这一点都不重要。在NT上,.bat和.cmd扩展名都会导致cmd.exe处理器以完全相同的方式处理文件。

有关MS TechNet中WinNT类系统上command.com与cmd.exe的其他有趣信息(http://technet.microsoft.com/en-us/library/cc723564.aspx):

这种行为揭示了一个非常微妙的Windows NT的功能重要的16位MS-DOS shellWindows附带的(COMMAND.COM)NT是专门为Windows设计的NT。输入命令时由这个shell执行,它不会实际上执行它。相反打包命令文本并发送到32位CMD.EXE命令shell处决因为所有命令都是由CMD.EXE实际执行(Windows NT命令shell),16位shell继承了所有功能和完整Windows NT的设施壳

在批处理中工作的所有内容都应该在cmd中工作;cmd提供了一些用于控制环境的扩展。此外,cmd由新的cmd解释器执行,因此当bat在NTVDM仿真的16位环境下运行时,它应该更快(在短文件上不明显),更稳定

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

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

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