据我所知,.bat是旧的16位命名约定,.cmd用于32位Windows,即从NT开始。但我仍然看到到处都有.bat文件,而且使用两个后缀时,它们的工作方式似乎完全相同。假设我的代码永远不需要在比NT更旧的软件上运行,那么我用哪种方式命名批处理文件真的很重要吗,或者使用错误的后缀会有什么问题等着我吗?
当前回答
差异:
.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的设施壳
从Mark Zbikowski本人的新闻组帖子中可以看到:
CMD.EXE与.CMD和.BAT之间的差异是:启用扩展名后,.CMD中的PATH/APPEND/PROMPT/SET/AASSOC文件将设置ERRORLEVEL,而不考虑错误。BAT设置ERRORLEVEL仅在错误时。
换句话说,如果ERRORLEVEL设置为非0,然后运行其中一个命令,则生成的ERRORLEVEL将为:
在.bat文件中仅保留非0值在.cmd文件中重置为0。
.cmd和.bat文件的执行不同,因为在.cmd错误级别变量中,它可以在受命令扩展名影响的命令上更改。这真的很重要。
尽管如此,在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>
扩展没有什么区别。
COMMAND.COM处理文件与CMD.EXE略有不同。
推荐文章
- 用Windows任务调度器运行批处理文件
- GIT克隆在windows中跨本地文件系统回购
- 如何运行一个PowerShell脚本而不显示窗口?
- PowerShell:仅为单个命令设置环境变量
- 为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?
- 如何将文件内容读入批处理文件中的变量?
- 环境变量存储在Windows注册表的哪里?
- 有一个好的Valgrind Windows的替代品吗?
- Windows和Linux上的c++编译:ifdef开关
- 如何验证批处理文件中是否存在一个文件?
- 如何循环通过文件匹配通配符在批处理文件
- 异步运行Windows批处理文件命令
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- 为什么git在Windows下记不住我的密码
- Git克隆/拉不断冻结在“存储密钥在缓存?”