据我所知,.bat是旧的16位命名约定,.cmd用于32位Windows,即从NT开始。但我仍然看到到处都有.bat文件,而且使用两个后缀时,它们的工作方式似乎完全相同。假设我的代码永远不需要在比NT更旧的软件上运行,那么我用哪种方式命名批处理文件真的很重要吗,或者使用错误的后缀会有什么问题等着我吗?
当前回答
我相信,如果将ComSpec环境变量的值更改为%SystemRoot%system32\cmd.exe(cmd),那么文件扩展名是.BAT还是.cmd都无关紧要。我不确定,但这甚至可能是WinXP及更高版本的默认值。
其他回答
在批处理中工作的所有内容都应该在cmd中工作;cmd提供了一些用于控制环境的扩展。此外,cmd由新的cmd解释器执行,因此当bat在NTVDM仿真的16位环境下运行时,它应该更快(在短文件上不明显),更稳定
不,这一点都不重要。在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的设施壳
答:显然,command.com的调用时间有点复杂;
几个月前,在一个项目的过程中,我们必须弄清楚为什么我们想在CMD.EXE下运行的一些程序实际上是在COMMAND.COM下运行的。所讨论的“程序”是一个非常旧的.BAT文件,它仍然每天运行。
我们发现,批处理文件在COMMAND.COM下运行的原因是它是从.PIF文件(也是古老的)启动的。由于只有通过PIF才能使用的特殊内存配置设置已变得无关紧要,我们将其替换为传统的桌面快捷方式。
从快捷方式启动的同一批处理文件在CMD.EXE中运行。仔细想想,这是有道理的。我们花了这么长时间才弄清楚,部分原因是我们忘记了它在创业团队中的项目是PIF,因为它从1998年开始生产。
尽管如此,在Windows7上,BAT文件也有这样的区别:如果您在同一目录中创建文件TEST.BAT和TEST.CMD,并且在该目录中运行TEST,它将运行BAT文件。
C:\>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
C:\Temp>echo echo bat > test.bat
C:\Temp>echo echo cmd > test.cmd
C:\Temp>test
C:\Temp>echo bat
bat
C:\Temp>
我相信,如果将ComSpec环境变量的值更改为%SystemRoot%system32\cmd.exe(cmd),那么文件扩展名是.BAT还是.cmd都无关紧要。我不确定,但这甚至可能是WinXP及更高版本的默认值。
推荐文章
- 如何创建自己的URL协议?(例如:/ /……)
- 在Windows批处理脚本中格式化日期和时间
- 映射一个网络驱动器供服务使用
- 如何在windows中使用命令提示符(cmd)列出文件。我试过在Linux中使用“ls”,但它显示一个错误?
- Windows上最好的免费c++分析器是什么?
- 如何在Windows上运行多个Python版本
- 运行计划任务的最佳方式
- Windows上Git文件的权限
- 如何同时安装Python 2。3. Python。Windows下的x
- BAT文件执行后保持CMD打开
- 可能改变安卓虚拟设备保存的地方?
- 如何检查DLL依赖关系?
- Android-Facebook应用程序的键散列
- 如何在PowerShell中输出一些东西
- 如何在命令提示符中使用空格?