Windows 批处理 .bat 和 .cmd 文件之间的区别
用户通常认为 COMMAND.COM
和 cmd.exe
相同。此外,他们对批处理文件使用哪个扩展名 .bat
或 .cmd
感到困惑。
它们是相同的还是不同的,使用哪些扩展是否重要?本文将讨论所有这些问题的答案。
当我们运行批处理文件时,它们会在命令提示符中执行。批处理文件主要在 Windows NT 版本的 cmd.exe
中运行。
在旧版本中,它将在 COMMAND.COM
shell 中运行。
COMMAND.COM
和 cmd.exe
之间的区别
COMMAND.COM
和 cmd.exe
是 MS-DOS 和 Windows 的命令解释器版本。COMMAND.COM
是一个用于运行 16 位程序的命令行 shell;它是一个 DOS 程序,它是启动后第一个运行的程序,它通过运行 AUTOEXEC.BAT
配置文件来设置系统。
它最初于 1980 年发布,用于 MS-DOS、Windows 95-98 和 Windows ME。它仅对设计为作为 16 位程序运行的旧程序兼容和有用,并且从那时起就没有更新。
另一方面,cmd.exe
是 COMMAND.COM
的继承者。它是为 32 位程序设计的,于 1987 年发布,用于 OS/2、Windows NT 和 Windows CE。
与 COMMAND.COM
相比,cmd.exe
提供了更好的扩展,例如详细的错误信息,支持箭头键查看命令历史,支持延迟变量扩展,并改进了内部命令。
批处理文件是一个脚本文件,可以存储命令并由命令行解释器按串行顺序执行。 .bat
文件扩展名用于 MS-DOS 和 Windows,它是第一个用于批处理文件的扩展名,而 .cmd
用于 Windows NT 系列和 OS/2。
.cmd
文件只能在 cmd.exe
中执行,因为 COMMAND.COM
无法识别此扩展名。
本教程将说明 .bat
和 .cmd
文件之间的主要区别。
Windows Batch .bat
和 .cmd
文件之间的主要区别
.bat
和 .cmd
之间的主要关键区别将在下面讨论。
ERRORLEVEL 处理
.bat
和 .cmd
以不同方式处理 ERRORLEVEL 变量。当调用 ERRORLEVEL
时,.bat
仅在发生真正错误时更改其状态,即对于诸如 append
、dpath
、ftype
、set
、path
、assoc 这样的命令
, .bat
不会设置 ERRORLEVEL。
但是,在 .cmd
的情况下,它会设置 ERRORLEVEL,而不考虑真正的错误。即使成功执行,它也会将 ERRORLEVEL 重置为 0。
有时,它在编写脚本时会造成混乱,因此用户应该小心这一点。
执行顺序
环境变量 PATHEXT
控制执行顺序。执行取决于存储在 PATHEXT
变量中的变量的顺序。
如果 .bat
和 .cmd
脚本都存储在同一个文件夹中,执行不带扩展名的脚本将首先运行 .bat
文件,然后运行 .cmd
文件。PATHEXT
变量的默认顺序如下:
ECHO %PATHEXT%
但是,你可以更改 PATHEXT
变量中的扩展顺序。即使你删除了 PATHEXT
变量,其顺序也将与 Windows 的 MS-DOS 版本相同。
支持
关于对 Windows 版本的支持,几乎所有 Windows 版本都支持 .cmd
文件,这与 .bat
文件的情况不同。 .bat
最初是为 MS-DOS 开发的,而 .cmd
是为 Windows NT 开发的,因此 .cmd
文件不能在非 Windows NT 系统中执行。
.bat
的脚本比 .cmd
更旧。与 .bat
文件相比,.cmd
向后兼容。
安全
关于安全性,.cmd
比 .bat
更安全。由于 .bat
文件中的命令是以串行方式存储的,并且是逐行执行的,因此更容易受到安全攻击。 .cmd
文件不按顺序执行命令,因此它们比 .bat
文件更安全。
.cmd
文件也可以通过允许查看、安装和运行 .cmd
文件的应用程序在 Android 中使用。Android 不支持 .bat
文件。
语
.bat
文件具有旧版本的 Microsoft 语言,因为它是早期为 MS-DOS 开发的。 .cmd
是为较新版本的 Windows 开发的编程语言和解释器。
当你运行没有任何扩展名的批处理文件时,它将以 .bat
运行,而对于 .cmd
文件扩展名,你必须输入文件名作为 filename.cmd
。这种情况仅适用于两个扩展名具有相同文件名的情况; .cmd
需要提供扩展名来运行文件,而 .bat
文件直接运行程序而不需要扩展名。
如下图所示,我们有两个具有相同文件名 testfile
和不同扩展名 .bat
和 .cmd
的批处理文件。 .bat
文件存储为 Windows 批处理文件,.cmd
存储为 Windows 命令脚本。
运行 .bat
文件:
运行 .cmd
文件:
工作环境
.bat
文件设计为在 NTVDM 环境中运行,这是一个在 32 位 Windows 上运行 16 位程序的 Windows 进程。NTVDM 代表 Windows NT 虚拟 DOS 机器,执行为 ntvdm.exe
。
它是系统的重要程序,为了程序的稳定运行,不应删除它。 .bat
文件在此环境中运行,因此在所有环境中都受支持,而 .cmd
文件无法在 16 位环境中执行。
此外,.cmd
文件在执行之前存储在内存中,而 .bat
文件逐行执行命令而不将它们存储在内存中。
解释器
带有 .bat
文件扩展名的批处理文件可以在 COMMAND.COM
和 cmd.exe
下运行,尽管两个解释器执行文件的方式不同。 .cmd
文件仅在 cmd.exe
中运行。
COMSPEC
环境变量用于启动批处理文件的命令行解释器。默认情况下,对于旧版本(如 MS-DOS),它设置为 COMMAND.COM
。
从 Windows NT 开始,它默认为 cmd.exe
。要查看其内容,请执行以下命令:
ECHO %COMSPEC%
因此,较新版本的 Windows 将在 cmd.exe
中运行。但在旧版本中,只会执行 .bat
文件。
结论
因此,我们已经讨论了批处理文件扩展名 .bat
和 .cmd
之间的基本关键区别。两者都有各自的优势。
总而言之,在 .bat
文件中工作的所有内容也应该在 .cmd
文件中工作。 .cmd
文件比 .bat
文件更快、更稳定。
使用正确的扩展取决于你的要求。但是,对于较新的版本,建议使用 .cmd
文件扩展名。