我试过谷歌,但也许谷歌魔力不好,因为我没有找到合适的解释,
我有一个用于停止和启动某些服务的批处理文件。然后使用服务帐户在任务计划程序中安排此批处理文件。
如果我将扩展名从 .bat 更改为 .cmd,则脚本将失败,因为用户似乎没有停止和启动服务的权限。
但是为什么仅仅改变脚本的扩展名就会改变行为呢?
答案1
bat和cmd使用起来有什么区别?
BAT 是为了与 DOS 的命令解释器 COMMAND.COM 交互而创建的。Microsoft 将大多数 DOS 命令纳入了其名为 CMD.EXE 的新解释器中。CMD 是为了与 CMD.EXE 交互而创建的,它破坏了与 COMMAND.COM 的兼容性。另一个关键区别在于它们如何处理错误级别变量。使用 BAT 时,此变量仅在发生实际错误时才会更改,并且每个命令成功执行时状态不会发生变化。对于 CMD 来说情况并非如此,因为即使没有发生错误,错误级别变量仍会改变状态。程序员在创建复杂的脚本时应注意这一点,因为它可能会造成一点混乱。
除了这些细微的差别之外,CMD 和 BAT 是完全相同的。大多数创建简单脚本来清除或传输文件的用户不会遇到任何问题。对于较新版本的 Windows 用户来说,BAT 和 CMD 几乎可以互换,因为 CMD.EXE 会解释并执行两个文件中的命令。虽然大多数用户都知道这个事实,但许多有机会使用 DOS 及其批处理文件的老年人仍然使用 BAT 扩展名;只是出于习惯和熟悉。
概括:
1. BAT 扩展名用于 DOS 和 Windows,而 CMD 扩展名用于 Windows NT 命令脚本
2. BAT 扩展名可以由 COMMAND.COM 和 CMD.EXE 解释,而 CMD 扩展名只能由 CMD.EXE 解释
3. CMD 中的错误级别始终会改变状态,但 BAT 中只会在发生错误时才会改变状态
如果我将扩展名从 .bat 更改为 .cmd,则脚本将失败
为了完全准确地回答您问题的这一部分,需要披露您所使用的逻辑,以便了解它如何帮助解决问题。
否则,我会认为您看到的失败与.CMD
脚本如何处理错误级别差异或某些组策略或其他限制有关,这些限制会影响 的解释,CMD.exe
而不是运行和解释时的影响COMMAND.COM
。