web-dev-qa-db-ja.com

DOSバッチファイルで::(二重コロン)はどういう意味ですか?

このプログラムを見つけました http://baiyunmanor.com/blog/work/get-current-date-time-in-dos-batch-file/

しかし、私は行が何をするのかわかりません

:: datetime.bat

最後に意味ですか?

45
user310291

::はラベルです(不正確にも、comment labelで知られています)、実際には、コメントと見なすことができます。 REMは、「goto-able」ラベルであるためです。

ただし、REM::の間には違いがあります。主なものは次のとおりです。

  • ECHO ONでは、REM行が表示されますが、::でコメントされた行は表示されません
  • ::は行末キャレットを実行できます(つまり、^で始まる行の末尾にある::は、次の行を作成します()コメント) :

    :: 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...
    
56
acdcjunior

二重コロンで始まる行は、コマンドプロセッサによって無視される無効なラベルを表すため、コメントの挿入にmayを使用します。追跡できない理由により、多くの人が::を使用してバッチファイルにコメントを挿入しますが、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

言い換えると、コメントを挿入したい場合にREMコマンドを使用したくない場合(そうする理由は考えられませんが)、32の可能な文字の組み合わせがあります。これを正確に使用する必要がある理由:::? 35年前に書かれたいくつかの古いプログラムがそれをしたからといって?

55
Aacini

コロンで始まる行は、gotoでジャンプできるラベルです。

goto end
:end

二重コロンで始まる行はラベルです。ただし、誤ってジャンプすることはできません。

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

したがって、行をコメント化するには二重コロンを使用します。

ソース: http://www.robvanderwoude.com/comments.php

16
Koterpillar

acdcjuniorLabelsおよび::には特別なロジックがあり、括弧ブロックで問題を引き起こす可能性があります

ここにいくつかのサンプルがあります

サンプル1

IF 1==1 (
  ::
)

サンプル1の出力

) was unexpected at this time.

サンプル2

IF 1==1 (
  ::
  ::
)

サンプル2の出力

The system cannot find the drive specified.
7

コロン(:)はラベルマーカーであり、取得した指示に使用できます。

一部の人々は:をコメントとしても使用しているので、二重コロンは単なる文体REMステートメント

2
Preet Sangha