如何在批处理/cmd中“注释”(添加注释)?

我有一个批处理文件,它运行几个进行表修改的python脚本。

  1. 我想让用户注释掉他们不想运行的1-2个python脚本,而不是从批处理文件中删除它们(这样下一个用户就知道这些脚本作为选项存在!)

  2. 我还想添加注释以引起他们的注意,特别是在运行Batch文件之前需要在Batch文件中更新的变量。我看到我可以使用REM。但看起来这更多的是为了在用户运行后更新进度。

是否有更合适地添加注释的语法?

1532215 次浏览

不,普通的旧批处理文件使用REM作为注释。ECHO是在屏幕上打印某些内容的命令。

要“注释掉”文件的部分,您可以使用GOTO。所有这些命令/技术的示例:

REM it starts here the section below can be safely erased once the file is customisedECHO Hey you need to edit this file before running it!  Check the instructions insideECHO Now press ctrl-c to interrupt execution or enter to continuePAUSEREM erase the section above once you have customised the filepython executed1.pyECHO Skipping some stuff nowGOTO Endpython skipped1.pypython skipped2.py:ENDpython executed2.py

我能说什么呢?批处理文件是很久以前的遗物,它们笨重而丑陋。

你可以阅读更多在本网站

编辑:稍微修改了示例,使其包含您显然正在寻找的元素。

rem命令确实是用于注释的。它在运行脚本后不会自动更新任何人。不过,一些脚本作者可能会以这种方式使用它而不是echo,因为默认情况下,批处理解释器会在处理每个命令之前对其进行打印。由于rem命令什么都不做,因此打印它们是安全的,没有副作用。要避免打印命令,请在其前缀加上@,或者,要在整个程序中应用该设置,请运行@echo off。(echo off是为了避免打印更多命令;@是为了避免在回显设置生效之前打印命令。)

因此,在您的批处理文件中,您可以使用以下内容:

@echo offREM To skip the following Python commands, put "REM" before them:python foo.pypython bar.py

使用::REM

::   commentttttttttttREM  commenttttttttttt

(正如人们所说):

  • 如果它们不在行的开头,则添加&字符:
    your commands here & :: commenttttttttttt
  • 内部嵌套部分(IF/ELSEFOR循环等)::应遵循法线,否则会出错(在那里使用REM)。
  • ::也可能在setlocal ENABLEDELAYEDEXPANSION内失败

:: 而不是REM最好在计算机不是很快的日子里使用。REM'ed行被读取,然后被导入。::'ed行一直被忽略。这可以加快你在“旧时代”的代码速度。在REM之后,你需要一个空格,:: 之后你不需要。

正如第一条评论所说:您可以将信息添加到您认为需要的任何行

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

至于跳过部分。将REM放在每一行前面可能相当耗时。如前所述,使用GOTO跳过部分是跳过大块代码的简单方法。确保在您希望代码继续的位置设置: LABEL。

SOME CODE
GOTO LABEL  ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL
SOME CODE TO SKIP.LAST LINE OF CODE TO SKIP
:LABELCODE TO EXECUTE

多行注释

如果有大量的行你想注释掉,那么它会更好,如果你可以使多行注释,而不是注释掉每一行。

这篇文章由Rob van der Woude发表在评论区

批处理语言没有注释块,尽管有一些方法要达到这个效果

GOTO EndComment1This line is comment.And so is this line.And this one...:EndComment1

您可以使用GOTO Label和: Label进行块注释。

或者,如果注释块出现在批处理文件的末尾,则可以在代码末尾写入EXIT,然后为您的代码编写任意数量的注释理解

@ECHO OFFREM Do something••REM End of code; use GOTO:EOF instead of EXIT for Windows NT and laterEXIT
Start of comment block at end of batch fileThis line is comment.And so is this line.And this one...

使用命令将注释放在同一行:使用& :: comment

color C          & :: set red font colorecho IMPORTANT INFORMATIONcolor            & :: reset the color to default

说明:

#0分隔两个命令,所以在这种情况下color C是第一个命令,:: set red font color是第二个命令。


重要提示:

这个带有注释的语句看起来直观正确:

goto error1         :: handling the error

但它是注释的不是有效使用。它之所以有效,是因为goto忽略了第一个参数之后的所有参数。证明很容易,这个goto也不会失败:

goto error1 handling the error

但类似的尝试

color 17            :: grey on blue

由于color命令未知的4个参数导致执行命令失败:::greyonblue

它只会工作:

color 17     &      :: grey on blue

因此,符号是不可避免的。

您可以使用::REM注释一些内容:

your commands here:: commenttttttttttt

your commands hereREM  commenttttttttttt

要在与命令相同的行中执行此操作,您必须添加与号:

your commands here      & ::  commenttttttttttt

your commands here      & REM  commenttttttttttt

备注:

  • 在嵌套逻辑中使用#0IF-ELSEFOR循环等…)会导致错误。在这种情况下,请改用#3

这是一个古老的话题,我想在这里加上我的理解,以扩大这个有趣话题的知识。

REM和:: 的区别在于:

REM本身是一个命令,而:: 不是。

我们可以将:: 视为一个标记,当CMD解析器遇到一行中的第一个非空格是这个:: 标记时,它将跳过整行并读取下一行。这就是为什么REM后面应该至少跟一个空格,以便能够作为该行的注释,而:: 后面不需要任何空格。

REM本身是一个命令,可以从以下for语法中得到最好的理解

基本的for语法如下

FOR %v in (set) DO <Command> [command param]

这里<Command>可以是任何有效的命令所以我们可以写以下有效的命令行,因为rem是一个命令

FOR %i in (1,2,3) DO rem echo %i

但是,我们不能写以下行,因为::不是命令

FOR %i in (1,2,3) DO :: echo %i

您可以使用以下语法将注释添加到批处理文件的末尾:

@echo off:: Start of code...:: End of code
(I am a commentSo I am!This can be only at the end of batch files

只要确保你从来没有使用一个封闭的括号。

署名:Leo Guttirez Ramirez onhttps://www.robvanderwoude.com/comments.php

您可以使用::rem进行注释。

评论时,使用::,因为它快3倍。显示了一个示例这里

只有当注释在if中时,才使用rem,因为冒号可能会出错,因为它们是一个标签。

评论一行

对于注释行使用REM或::,尽管::可能括号内失败

在以!<delimiter>开头的延迟扩展行内将被忽略,因此可以用于注释:

@echo off
setlocal enableDelayedExpansion
echo delayed expansion activated!;delayed expansion commented lineecho end of the demonstration

在行尾发表评论

对于行尾的注释,您可以再次使用rem::&组合:

echo --- &:: comment (should not be the last line in the script)echo --- &rem comment

在文件末尾发表评论

注意将在exit命令之后解析,您可以使用它将注释放在文件末尾:

@echo off
echo commands
exit /b
-------------------commnts at the endof the file------------------

内联评论

不存在的变量的扩展被替换为没有,并且设置一个变量=相当困难,你可以将其用于内联注释

@echo off
echo long command %= this is a comment =% with an inline comment

多行注释

对于多行注释,可以使用GOTO(用于外括号)和REM条件执行(用于内括号)。更多细节在这里

@echo off
echo starting script
goto :end_commentscomented lineone more commented line:end_comments
echo continue with the script
(echo demonstration offrem/||(lines withcomments)echo multiline comment insideecho brackets)

以及用宏美化的相同技术:

@echo off
::GOTO comment macroset "[:=goto :]%%"::brackets comment macrosset "[=rem/||(" & set "]=)"
::testingecho not commented 1
%[:%multilinecomment outside of brackets%:]%
echo not commented 2
%[:%second multilinecomment outside of brackets%:]%
::GOTO macro cannot be used inside forfor %%a in (first second) do (echo first not commented line of the %%a execution%[%multi linecomment%]%echo second not commented line of the %%a execution)

我更喜欢使用:

  • REM征求意见
  • &REM用于内联注释

示例:

@echo offset parameter1=%1%REM test if the parameter 1 was receivedif defined parameter1 echo The parameter 1 is %parameter1% &REM Display the parameter