.cmd 和 .bat 文件有什么区别?

Art*_*rov 38 windows batch-file windows-command-prompt

只是好奇。我们公司的“酷”人总是使用 *.cmd 而没有人能够向我解释其中的区别。

cha*_*aos 15

用于每种语言的命令语言存在语义差异(.bat文件获得兼容版本)。其中的一些可以通过这个脚本来说明在这里

@echo off&setlocal ENABLEEXTENSIONS
call :func&&echo/I'm a cmd||echo/I'm a bat
goto :EOF

:func
md;2>nul
set var=1
Run Code Online (Sandbox Code Playgroud)

基本上,.cmd文件获取当前的、更性感的 MS 命令语言版本,这就是酷孩子使用它们的原因。

  • <3 个混淆的 cmd 脚本 :) (2认同)

squ*_*man 15

这是来自 Stackoverflow 的一个很好的讨论

  • 是的,特别是以“这是经过验证的信息汇编”开头的答案,http://stackoverflow.com/questions/148968/windows-batch-files-bat-vs-cmd/149918#149918 (2认同)

KPW*_*INC 13

根据维基百科:

.bat:Microsoft 用于批处理文件的第一个扩展名。此扩展可以在大多数 Microsoft 操作系统中运行,包括 MS-DOS 和大多数版本的 Microsoft Windows。

.cmd:较新的 .cmd 扩展名被基于 Windows NT 的系统描述为“Windows NT 命令脚本”并且很有帮助,因为使用 .cmd 扩展名而不是 .bat 扩展名意味着早期版本的 Windows 将不知道如何运行它,这样他们就不会尝试错误地将命令用于 COMMAND.COM 样式文件,也不会由于缺少命令扩展而无法运行新样式命令,从而导致脚本仅部分运行,这可能会造成破坏(对于例如;未能检查文件的成功复制,然后仍然删除原始文件)。

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

希望这可以帮助。