HOWTO · Batch

在批处理脚本中添加注释

本教程提供在批处理脚本中添加注释的完整指南。了解可用的方法,包括 REM 命令和双冒号,以及为什么 GOTO(会重定向执行)不是注释方法。探索编写有效注释的最佳做法,让你的代码对自己和他人都更清晰。

本页内容

在 Windows Batch(.bat 或 .cmd)文件中添加注释时,使用 REM 是最清晰、最可靠的选择。以 :: 开头的行也常用作注释,但 CMD 会将其解析为标签,因此有位置上的限制。两种写法都可用来说明代码意图;它们都不会改变脚本原本要执行的操作。

选择 Batch 注释形式:REM 还是 ::

REM 是用于标记说明文字的命令。它是标准写法;在带括号的命令组中需要注释时,通常也更适合作为默认选择。:: 则是一种类似标签的惯用写法:CMD 会把它当作标签,而不是专门的注释命令。它适合简短的独立说明,但标签可能会影响代码块解析和控制流程。若希望脚本行为更可预测,周围语法较复杂时应优先使用 REM。

这两种写法都仅适用于 Windows CMD Batch。它们不是 PowerShell、Bash 或其他 shell 的通用注释语法。尽可能将注释放在单独一行,并简要说明命令的用途,或它所依赖的假设。

使用 REM 或 :: 添加单行注释

下面的 Windows CMD 示例展示了一个可保存为 comments.bat 的简短用法。它在命令前分别放置一行 REM 和一行 ::,方便你对照两种形式在实际脚本中的写法。该示例已成功运行,并显示下方的两行状态信息;其中的状态标签保留英文。

@echo off
REM Describe the next action for the person maintaining this file.
echo Preparing the report
:: This label-like line is commonly used as a short note.
echo Report ready
Preparing the report
Report ready

CMD 执行到 REM 命令时,会忽略其后的说明文字,不把它当作指令。:: 行则会被视为标签,通常也用于相同的视觉用途。每条注释后面的命令仍会执行。注释内容应避免让人误以为脚本完成了实际上并未执行的工作。

处理命令组内及命令后的注释

注释可以放在两条命令之间。例如,可以在 IF 行与后续命令之间单独放置一行 REM。在带括号的命令组中,应将 REM 放在独立一行,并避免在注释文字中使用可能影响 CMD 解析整个命令组的字符,尤其是没有配对的括号。CMD 解析带括号的命令块时,可能会展开 %name%,包括 REM 行中的内容。说明文字虽然会被丢弃而不会显示,但变量展开仍可能改变代码块的解析方式;因此注释应保持简单,并避免在其中使用百分号表达式。代码块内的注释尤其应简短明了。

若要在命令后添加简短说明,可用 & 分隔,并使用 REM,例如 echo Preparing the report & REM this command prints the status。& 会在同一行开始执行另一条命令,但这并不意味着任何注释形式在所有上下文中都安全。不要把 :: 附加在命令后,也不要在 IF 命令之后插入注释,以免原本应与该 IF 对应的 ELSE 失去关联。如果一行包含条件语法、命令分隔符或带括号的命令组,就把注释移到单独一行。这样更容易看清命令结构,也能减少解析方面的意外。

安全地编写多行说明

Batch 没有原生的块注释分隔符。要将说明写成多行,最直接的方法是在每一行前加上 REM(简单且独立的说明也可以使用 ::)。在命令组附近,重复使用 REM 更合适,因为它是真正的命令,用途也很明确。

GOTO 会跳转到指定标签,因此会改变脚本的控制流程;它不是注释语法。不要用它把代码块标记成注释;多行说明应在每一行重复使用 REM。

一般情况下选择 REM;只有在周围结构简单时,才将 :: 用于独立的标签式说明。在条件命令或分组命令附近,应把注释放在单独一行。这些示例针对 Windows CMD Batch 文件,不应将其当作其他 shell 的注释语法使用。