在DOS批处理文件中::(双冒号)是什么意思?

时间:2013-05-19 07:57:27

标签: batch-file dos

我找到了这个程序http://baiyunmanor.com/blog/work/get-current-date-time-in-dos-batch-file/

但我不知道该行是什么

:: datetime.bat

到底是什么意思?

6 个答案:

答案 0 :(得分:53)

以双冒号开头的行表示命令处理器忽略的无效标签,因此可能用于插入注释。由于无法跟踪的原因,许多人使用::在批处理文件中插入注释,但您必须意识到其使用中存在一些陷阱,这些陷阱在Koterpillar&#39中给出的链接中有所描述。的答案。似乎第一次使用::而不是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

换句话说:如果你想插入评论并且你不想使用REM命令(虽然我无法想到这样做),你有32个可能的字符组合到这样做。为什么你应该使用这个:::?仅仅因为35年前编写的一些旧程序就是这样做的吗?

答案 1 :(得分:51)

::是一个标签(也是不准确的,通过评论标签在野外都知道),实际上可以像REM一样被视为评论,如它是一个“不可转动”的标签。

REM::之间存在一些差异。主要是:

  • 显示ECHO ON时会显示REM行,但不会显示评论为::
  • 的行
  • ::可以执行行尾插入符号(即^在以::开头的行的末尾生成下一行也< / strong>评论):

    :: This is a comment^
    echo but watch out because this line is a comment too
    
  • 标签和::有一个特殊的逻辑,可能会导致括号块出现问题 - 在( )内使用时要小心。例如:

    for %%D in (hi) do (
        echo Before...
        :: My comment
        :: Some other comment
        echo After...
    )
    

    输出:

    Before ...
    The system cannot find the drive specified.
    After...
    

答案 2 :(得分:15)

以冒号开头的行是您可以使用goto跳转到的标签:

goto end
:end

以双冒号开头的行是一个标签,除非你不能,甚至不小心跳到它:

goto :end REM this doesn't work
::end

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

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

答案 3 :(得分:7)

正如acdcjunior提到的标签和::有一个特殊的逻辑,可能会导致括号内的问题

以下是几个样本

样本1

IF 1==1 (
  ::
)

样本1的输出

) was unexpected at this time.

样本2

IF 1==1 (
  ::
  ::
)

样本2的输出

The system cannot find the drive specified.

答案 4 :(得分:2)

冒号(:)是一个标签标记,可用于获取说明。

有些人使用:作为评论,所以双冒号只是一种风格的REM声明

答案 5 :(得分:1)

如果您使用传统的 REM 命令在 DOS 批处理脚本中注释掉一行,那么注释中的任何输出重定向仍会完成。例如,考虑这个脚本:

echo 1 > a.txt
rem echo 2 > b.txt
echo 3 > c.txt

该脚本将截断 b.txt 即使该行看起来被“注释掉”。

使用像双冒号这样的无效标签前缀将禁用任何重定向。