我应该在批处理文件中使用哪种评论风格?

我一直在写一些批处理文件,然后我遇到了这个用户指南,这个指南非常有用。 它向我展示的一件事是,不仅可以用REM对线条进行评论,还可以对::进行评论。 它说:

批处理代码中的注释可以通过使用双冒号来完成,这比使用REM命令更好,因为标签是在重定向符号之前处理的。 ::<remark>不会导致问题,但rem <remark>会产生错误。

那么,为什么我会使用REM命令做大多数指南和例子? 是否::适用于所有版本的Windows?


tl; dr: REM是在批处理文件中嵌入批注的记录和支持的方式。


::实质上是一个永远不会被跳到的空白标签,而REM是一个没有任何作用的实际命令。 在任何情况下(至少在Windows 7上)重定向操作符的存在都会导致问题。

但是,在某些情况下, ::被称为在块中行为不当,被解析为不是标签,而是某种驱动器盘符。 我对某个地方有点模糊不清,但仅此一点就足以让我完全使用REM 。 它是在批处理文件中嵌入批注的记录和支持的方式,而::仅仅是特定实现的工件。

编辑

这是一个例子,其中::FOR循环中产生问题。

这个例子在你桌面上的一个名为test.bat的文件中不起作用:

@echo off
for /F "delims=" %%A in ('type C:Users%username%Desktoptest.bat') do (
    ::echo hello>C:Users%username%Desktoptext.txt
)
pause

虽然这个例子可以正确地评论:

@echo off
for /F "delims=" %%A in ('type C:Users%username%Desktoptest.bat') do (
    REM echo hello>C:Users%username%Desktoptext.txt
)
pause

尝试将输出重定向到文件时,问题似乎是。 我最好的猜测是它将::解释为一个名为:echo的转义标签。


REM的评论

如果REM不是第一个标记的结尾,则REM可以标出完整的一行,也可以标记行结束处的多行插入符号。

REM This is a comment, the caret is ignored^
echo This line is printed

REM This_is_a_comment_the_caret_appends_the_next_line^
echo This line is part of the remark

REM后跟一些字符.:/=有点不同,它不会对&符号发表评论,因此您可以将它用作内嵌评论。

echo First & REM. This is a comment & echo second

但为了避免REMREM.batREM;.bat等现有文件出现问题,只能使用修改后的变体。

REM^;<space>Comment

对于角色; 也是允许的一种;,:/=

REM比Win :: 慢6倍左右(在Win7SP1上用100000条注释行测试)。
对于正常使用情况来说,这并不重要(每条注释行58μs与360μs)

评论::

A ::总是执行行结束符。

:: This is also a comment^
echo This line is also a comment

标签和注释标签::在括号块中有一个特殊的逻辑。
它们总是跨越两行SO:goto command not working。
所以他们不推荐用于括号,因为它们通常是语法错误的原因。

ECHO ONREM线上显示,但不是一行评论::

两者都不能真正注释掉其余部分,所以简单的%~会导致语法错误。

REM This comment will result in an error %~ ...

但是,即使在特殊字符阶段完成之前,REM也能够在早期阶段停止批解析器。

@echo ON
REM This caret ^ is visible

您可以使用&REM或&::在命令行末尾添加注释。 这种方法是有效的,因为'&'在同一行上引入了一个新的命令。

带百分号的评论%= comment =%

存在具有百分号的评论风格。

事实上,这些都是可变的,但它们已经扩大到没有。
但优点是它们可以放在同一条线上,即使没有&
等号确保这样一个变量不能存在。

echo Mytest
set "var=3"     %= This is a comment in the same line=%

批处理宏建议使用百分比样式,因为它不会更改运行时行为,因为在定义宏时将删除注释。

set $test=(%n%
%=Start of code=% ^
echo myMacro%n%
)

当我意识到我可以使用label ::来发表评论和评论代码REM ,对我来说显得很丑陋。 正如前面提到的,当使用inside ()被阻塞的代码时,双冒号会导致问题,但是我发现了在标签::: space之间交替的解决方法

:: This, of course, does
:: not cause errors.

(
  :: But
   : neither
  :: does
   : this.
)

它不像REM那样丑陋,实际上为代码添加了一点风格。

所以代码块之外我用::和里面他们我之间交替:::

顺便说一下,对于大量的评论,如批处理文件的标题,您可以通过简单地goto您的评论来完全避免特殊的命令和角色。 这让你可以使用任何你想要的标记方法或样式,尽管事实上如果CMD实际上试图处理这些行,它会引起一阵嘘声。

@echo off
goto :TopOfCode

=======================================================================
COOLCODE.BAT

Useage:
  COOLCODE [/?] | [ [/a][/c:[##][a][b][c]] INPUTFILE OUTPUTFILE ]

Switches:
       /?    - This menu
       /a    - Some option
       /c:## - Where ## is which line number to begin the processing at.
         :a  - Some optional method of processing
         :b  - A third option for processing
         :c  - A forth option
  INPUTFILE  - The file to process.
  OUTPUTFILE - Store results here.

 Notes:
   Bla bla bla.

:TopOfCode
CODE
.
.
.

使用什么都记法你想*的, @的等。

链接地址: http://www.djcxy.com/p/20231.html

上一篇: Which comment style should I use in batch files?

下一篇: Why doesn't Python have multiline comments?