对于 Windows 系统,“.bat”或“.cmd”扩展名对我的脚本有什么影响吗?

Dio*_*ogo 5 windows command-line shell-script batch-file

假设我的 shell 脚本完全基于 DOS 命令(dir、cd 等而不是 VBS 或 PowerShell 命令),使用 .cmd 或 .bat 扩展名作为它的名称会改变什么吗?我的意思是,如果使用 .cmd 或 .bat 扩展名,它将以相同的方式和相同的解释器执行?

Chr*_*ian 3

stackoverflow有一个写得很好的答案。

所以,不,它不会影响你的命令。只是 ERRORLEVEL 的处理有所不同。在cmd中,无论是否有错误,都会设置ERRORLEVEL。

只有出现错误时,Bat 才会执行此操作。

来自维基百科

维基百科的新引用

.cmd 和 .bat 文件执行之间唯一已知的区别是,在 .cmd 文件中,即使是受命令扩展影响的成功命令(启用命令扩展时),ERRORLEVEL 变量也会发生变化,而在 .bat 文件中,ERRORLEVEL 变量也会发生变化。仅在发生错误时更改。

上面引用的维基百科的来源实际上是基于这个新闻组的帖子

就 CMD.EXE 而言,.CMD 和 .BAT 之间的区别是: 启用扩展后,.CMD 文件中的 PATH/APPEND/PROMPT/SET/ASSOC 将设置 ERRORLEVEL,无论错误如何。.BAT 仅在发生错误时设置 ERRORLEVEL。

值得注意的是,它在差异方面比维基百科文本更具限制性,但考虑到马克·兹比科夫斯基本人的事实,也值得明确提及——恕我直言,这给了巨大的可信度奖励。