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