acd*_*ior 59

::(也称为评论标签)是一个评论REM.

它们之间存在一些差异.主要是:

  • 随着REM一个::线显示,但不符合评论ECHO ON
  • A REM可以执行行尾插入符号(即,::以行开头的行的末尾::使下一行也是注释).
  • 标签并^具有特殊的逻辑,可能会导致括号内的问题 - 在内部使用时要小心:: ::.

  • 当你引用`::`"也称为_comment label_"时,你应该包含一个指向_official_ source的链接,你可以引用它; 否则你有助于传播可能错误的_popular believes_. (7认同)
  • 块中的特殊处理在[SO:goto命令不起作用](http://stackoverflow.com/a/4006006/463115)中描述,更多关于[SO:我应该在批处理文件中使用哪种注释样式?](http ://stackoverflow.com/a/12408045/463115) (4认同)
  • 哇,我在for循环中使用了::我花了整整一天时间来完成这篇文章.在我的案例中,()中的双冒号行为似乎未确定.如果只是通过自身在(),它要么崩溃执行或说"......找不到指定的驱动器"(该效果,不同的语言),而'CHDIR’清楚地表明我的'CD’的工作. (2认同)

Aac*_*ini 59

以双冒号开头的行表示命令处理器忽略的无效标签,因此用于插入注释.由于无法跟踪的原因,许多人使用::在批处理文件中插入注释,但您必须意识到其使用中存在一些陷阱,这些陷阱在Koterpillar的答案中给出的链接中有所描述.似乎第一次使用::而不是REM命令的目的是加速在慢速机器(即:软盘)中执行批处理文件,但这个原因并不是多年前使用双冒号的有效理由.

任何包含无效标签的行都将被命令处理器忽略,您几乎可以使用任何特殊字符来生成无效标签.例如:

@echo off

:~ This is a comment
:` This is a comment
:! This is a comment
:@ This is a comment
:# This is a comment
:$ This is a comment
:% This is a comment
:^ This is a comment
:& This is a comment
:* This is a comment
:( This is a comment
:) This is a comment
:_ This is a comment
:- This is a comment
:+ This is a comment
:= This is a comment
:{ This is a comment
:} This is a comment
:[ This is a comment
:] This is a comment
:| This is a comment
:\ This is a comment
:: This is a comment
:; This is a comment
:" This is a comment
:' This is a comment
:< This is a comment
:> This is a comment
:, This is a comment
:. This is a comment
:? This is a comment
:/ This is a comment

echo OK
Run Code Online (Sandbox Code Playgroud)

换句话说:如果你想插入注释而你不想使用REM命令(虽然我想不出任何理由这样做),你有32个可能的字符组合来做到这一点.为什么你应该使用这个:::?仅仅因为35年前编写的一些旧程序呢?

  • 既然你不能想到我会给你两个原因:**可读性**(`::`在批处理脚本中主要是字母字符的非字母表中脱颖而出......如果你来自C++其中`//`是单行注释,`::`kinda对于相同的目的是有意义的)和**节省空间**(如果你曾经达到大小上限 - 超过60 kB - 用脚本你会很高兴能够保存一些字节......是的,这些大型单片脚本也有很好的理由. (7认同)
  • @Aacini:我确实读过它并且*提示*我发表评论.在你的五个选择中****所有**需要比`::`更多的手指移动,更糟糕的是,五个中的三个使用超过两个字符.虽然这是一个*逻辑*解释,但我无法帮助"合理"或"可接受",因为这些都是完全主观的.但是,除了那些替代方案之外`://`对我来说是最容易接受的,如果我也没有选择使用`::`. (4认同)
  • `REM` 在诸如 `REM /?a=1`(“此时`1 出乎意料。`”)之类的注释中出错,而`::` 似乎可以很好地处理它们。 (4认同)
  • @0xC0000022L:您似乎没有阅读我的帖子,也没有阅读我的评论。如果你想要**可读性**并且你来自 C++,那么`://` _更有意义_插入单行注释!从这个角度来看,为什么不像在 VBScript 中使用 `:'`,或者在 PowerShell 和其他几种脚本语言中使用 `:#`,或者在 SQL 中使用 `:--`,或者使用`:&lt;--`就像在 HTML 中,等等...换句话说:如果你想插入一个评论并且你有 32 种可能的字符组合可供选择,为什么你应该使用这个:`::`?`::`的选择没有_reasonable=acceptable=logical_的原因 (3认同)

Kot*_*lar 18

以冒号开头的行是一个标签,您可以跳转到goto:

goto end
:end
Run Code Online (Sandbox Code Playgroud)

以双冒号开头的行是一个标签,除非您不能,甚至意外地跳转到它:

goto :end REM this doesn't work
::end
Run Code Online (Sandbox Code Playgroud)

因此,双冒号用于评论行.

资料来源:http://www.robvanderwoude.com/comments.php


Vse*_*nov 7

acdcjunior Labels所述,它::具有特殊的逻辑,可能会导致括号内的问题

这里有几个样本

样品1

IF 1==1 (
  ::
)
Run Code Online (Sandbox Code Playgroud)

样品1的输出

) was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)

样本2

IF 1==1 (
  ::
  ::
)
Run Code Online (Sandbox Code Playgroud)

样本2的输出

The system cannot find the drive specified.
Run Code Online (Sandbox Code Playgroud)