Windows批处理文件:.bat和.cmd有什么区别?

888
据我所了解,.bat 是旧的16位命名约定,而.cmd是用于32位Windows,例如从NT开始。但我仍然到处看到.bat文件,并且无论使用哪个后缀,它们似乎都能正常工作。假设我的代码永远不需要在NT之前的任何操作系统上运行,那么我将批处理文件命名为哪种方式真的很重要吗?或者说如果我使用错误的后缀会有一些问题等待着我吗?

64
如果我没记错的话,.ps1文件应该是Windows PowerShell文件,但我可能错了。 - CMS_95
10
.ps1是Windows PowerShell文件,它与.bat/.cmd批处理文件完全不同。 - xjcl
12个回答

-1

扩展名没有任何区别。

COMMAND.COM 处理文件与 CMD.EXE 有轻微差异。


-10

一个区别:

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

当您执行脚本文件并在其完成执行之前对其进行编辑时,您可能会遇到这种情况。这将破坏.bat文件,但不会影响.cmd文件。


正如所确定的,ComSpec环境变量定义了要启动的程序,您是否基本上是在说command.com逐行读取文件,而cmd.exe将文件预加载到内存中?您能否引用一下参考资料? - Chris Noe
26
对于Vista和XP系统来说,这种文件类型是按行读取的。如果您暂停.cmd或.bat文件并对其进行编辑,则新的代码将被执行。 - jeb
5
也许你在想起JP软件的替代命令解释器时,会用到.btm(“batch to memory”)文件。详见:http://jpsoft.com./help/batchtype.htm - JdeBP
1
有人可能会争论它是否是逐行解析,因为如果您在命令文件的中间暂停执行并在开头添加一个字符,恢复解析器后将偏移一个字符,可能会影响您脚本的其余部分。 - user315772
2
你不应该争论.bat和.cmd在这方面没有区别。两者都是逐行读取的。如果你不相信,可以测试一下。创建一个批处理文件,其中包含echo 1&pause,然后执行它。你会看到1按任意键继续...。在暂停时使用外部编辑器添加一个新行echo 2&pause。按下一个键。你会看到2按任意键继续...。你甚至可以尝试在开头添加echo 3&pause。当你再次按下一个键后,你会看到2 - venimus
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接