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


当前回答

差异:

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

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

其他回答

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

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

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

在命令行输入filename或filename.bat将运行.bat文件要运行.cmd文件,必须输入filename.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的设施壳

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

差异:

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

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