Windows批处理文件:.bat vs .cmd?

て烟熏妆下的殇ゞ 提交于 2019-12-23 20:28:52

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

据我所知, .bat是旧的16位命名约定,而.cmd是32位Windows,即从NT开始。 但我继续在任何地方看到.bat文件,并且它们似乎使用任一后缀完全相同。 假设我的代码将永远不需要对新台币任何旧的运行,是否真的重要走哪条路我名字我的批处理文件,还是有使用错误的后缀一些疑难杂症等着我?


#1楼

RE:显然当调用command.com时有点复杂的谜团;

几个月前,在项目过程中,我们必须弄清楚为什么我们想要在CMD.EXE下运行的某些程序实际上是在COMMAND.COM下运行的。 有问题的“程序”是一个非常古老的.BAT文件,它仍然每天运行。

我们发现批处理文件在COMMAND.COM下运行的原因是它是从.PIF文件(也很古老)启动的。 由于仅通过PIF提供的特殊内存配置设置已变得无关紧要,因此我们将其替换为传统的桌面快捷方式。

从快捷方式启动的同一批处理文件在CMD.EXE中运行。 当你考虑它时,这是有道理的。 我们花了这么长时间才弄明白的原因部分是由于我们忘记了它在启动组中的项目是PIF,因为它自1998年以来一直在生产。


#2楼

这些答案有点太长,专注于交互式使用。 脚本的重要区别是:

  • .cmd可防止在非NT系统上无意中执行。
  • .cmd启用内置命令,在成功时将Errorlevel更改为0。

过去在.cmd文件中也启用了许多其他功能。 但是,Windows 2000或更高版本下的.bat和.cmd文件中默认启用命令扩展。

结论:2012年及以后,我建议专门使用.cmd


#3楼

不 - 丝毫没关系。 在NT上,.bat和.cmd扩展名都会导致cmd.exe处理器以完全相同的方式处理文件。

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

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


#4楼

来自Mark Zbikowski本人的新闻组发布

就CMD.EXE而言,.CMD和.BAT之间的区别在于:启用扩展后,.CMD文件中的PATH / APPEND / PROMPT / SET / ASSOC将设置ERRORLEVEL而不管错误。 .BAT仅在出错时设置ERRORLEVEL。

换句话说,如果将ERRORLEVEL设置为非0,然后运行其中一个命令,则生成的ERRORLEVEL将为:

  • 单独留在.bat文件中的非0值
  • 在.cmd文件中重置为0。

#5楼

扩展没有区别。

处理文件的COMMAND.COMCMD.EXE之间存在细微差别。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!