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

我想让用户注释掉1-2个他们不想运行的python脚本,而不是从批处理文件中删除它们(这样下一个用户就知道这些脚本作为选项存在!) 我还想添加注释,以引起他们的注意,特别是他们在运行批处理文件之前需要更新的变量。我看到我可以使用REM,但它看起来更像是在用户运行后更新进度。

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


当前回答

使用::或REM

::   commenttttttttttt
REM  commenttttttttttt

但是(正如人们所指出的):

如果它们不在行首,则添加&字符: 你的命令在这里&::commenttttttttttt 在嵌套部分(IF/ELSE, FOR循环等…)::后面应该跟着法线,否则会给出错误(在那里使用REM)。 ::在setlocal enabledelayeexpansion中也可能失败

其他回答

你可以使用::或REM来注释一些东西:

your commands here
:: commenttttttttttt

or

your commands here
REM  commenttttttttttt

 

为了在同一行执行命令,你必须添加一个&号:

your commands here      & ::  commenttttttttttt

or

your commands here      & REM  commenttttttttttt

 

注意:

在嵌套逻辑(IF-ELSE, FOR循环等)中使用::将导致错误。在这种情况下,用REM代替。

这是一个古老的话题,我想在这里补充我的理解,扩展这个有趣的话题的知识。

REM和::之间的关键区别是:

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

我们可以把::作为一个令牌,只要CMD解析器在一行中遇到第一个非空白空格,它就会跳过整行,读取下一行。这就是为什么REM后面至少应该有一个空格,以便能够作为该行的注释,而::后面不需要任何空格。

REM本身是一个命令,从下面的FOR语法可以更好地理解

基本的FOR语法如下

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

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

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

然而,我们不能把下面的行写成::不是命令

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

使用::或REM

::   commenttttttttttt
REM  commenttttttttttt

但是(正如人们所指出的):

如果它们不在行首,则添加&字符: 你的命令在这里&::commenttttttttttt 在嵌套部分(IF/ELSE, FOR循环等…)::后面应该跟着法线,否则会给出错误(在那里使用REM)。 ::在setlocal enabledelayeexpansion中也可能失败

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

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

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

将注释与命令:use &:: comment放在同一行

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

解释:

&分隔了两个命令,因此在本例中,color C是第一个命令,::set红色字体颜色是第二个命令。


重要的是:

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

goto error1         :: handling the error

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

goto error1 handling the error

但是类似的尝试

color 17            :: grey on blue

原因:::,grey, on, blue 4个参数与color命令不匹配,导致命令执行失败。

它只会工作:

color 17     &      :: grey on blue

所以&是不可避免的。