与使用 bat 和 cmd 有什么区别?

Ver*_*kso 1 windows batch batch-file

我试过谷歌,但也许谷歌 mojo 不好,因为我还没有找到合适的解释

我有一个批处理文件,可以停止和启动一些服务。然后使用服务帐户在任务调度程序中调度此批处理文件。

如果我将扩展名从 .bat 更改为 .cmd 则脚本将失败,因为用户似乎没有停止和启动服务的权限。

但是为什么仅仅通过更改脚本的扩展名就可以改变行为呢?

Vom*_*yle 5

与使用 bat 和 cmd 有什么区别?

BAT 的创建是为了与 DOS 命令解释器 COMMAND.COM 进行交互。Microsoft 将大部分 DOS 命令采用到名为 CMD 的新解释器中。可执行程序。CMD 是为了与 CMD.EXE 交互而创建的,它破坏了与 COMMAND.COM 的兼容性。另一个关键区别在于它们如何处理 errorlevel 变量。使用 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. errorlevel 总是在 CMD 中改变状态,但只在 BAT 中发生错误时

来源


如果我将扩展名从 .bat 更改为 .cmd 则脚本失败

为了完全准确地回答您问题的这一部分,您需要公开您使用的逻辑,以便了解它正在做什么以帮助进行故障排除。

否则,我会假设你所看到的失败与该怎么办.CMD脚本处理,通过影响解释错误级别的差异或者是一些组策略或其他限制CMD.exe运行和解释时,不COMMAND.COM


更多资源