バッチ/コマンドで「コメントアウト」(コメントを追加)する方法は?


882

テーブルの変更を行ういくつかのpythonスクリプトを実行するバッチファイルがあります。

  1. ユーザーに、バッチファイルからスクリプトを削除するのではなく、実行したくない1-2個のpythonスクリプトをコメントアウトさせたいのです(次のユーザーは、これらのスクリプトがオプションとして存在することを知っています!)

  2. また、コメントを追加して、実行前にバッチファイルで更新する必要のある変数を具体的に説明します。使えることがわかりましたREM。しかし、それを実行した後にユーザーに進捗状況を更新することの方が多いようです。

コメントをより適切に追加するための構文はありますか?


6
参照してくださいここで優秀な答えstackoverflow.com/q/12407800/1011025
ndemou

2
することができます使用Rem Sthコマンドまたは使用このマーク::: Sth
scientist_7

回答:


880

remコマンドは、コメントを確かです。スクリプトを実行した後、本質的に誰も更新しません。echoただし、デフォルトではバッチインタープリターが各コマンドを処理する前に出力するため、スクリプトの作成者によってはの代わりにこの方法を使用する場合があります。remコマンドは何もしないので、副作用なしで印刷しても安全です。コマンドの印刷を回避するには、コマンドの前にを付けるか@、またはその設定をプログラム全体に適用するには、を実行し@echo offます。(それecho off以上のコマンド@を表示しないようにするためです。エコー設定が有効になる前にそのコマンドを表示しないようにするためです。)

だから、あなたのバッチファイルでは、これを使うかもしれません:

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py

405
2つのコロン「::」を使用することもできます。これは、バッチファイルの実行時にその行を表示または実行せずにバッチファイルに注釈を追加する2つの方法の1つです。REMとは異なり、この行はECHO offがバッチファイルにあるかどうかに関係なく表示されません。
Brent81 2013年

12
@ Brent81これは正解だと思います。構文を使用すると、REMコマンドは実際にはテキストを「コメントアウト」として強調表示しません。
Automatico

17
二重コロンは「無効なラベル」です。これを説明する記事と、なぜそのパフォーマンスがREMよりも優れているのか(特にフロッピーディスクでは!)、インデントされたコードブロックでは機能しない(最初の文字のみ):robvanderwoude.com/comments.php
マイケルポールコニス

4
面白い。私REMは「全体行コメント」だったとのダブルコロンは次のように、「インラインコメント」だったのにREM This whole line is a comment @echo off :: This comment is inline
リチャード・スミス

@ Alhadis、PerlのConfigureスクリプトはWindowsバッチではなくBourneシェルで記述されているので、ここでどのように関連していますか?さらに、コロンコマンドが有効なボーン構文であることは、「ボーナス副作用」ではありません。それが、ボーンスクリプトで使用されている理由です。明らかに、Configureがサポートすることを意図しているすべてのシェルで有効なコメント指定子ではない可能性があるため、コメント用に使用されます。ライン3を参照##
ロブ・ケネディ

956

::またはを使用REM

::   commenttttttttttt
REM  commenttttttttttt

しかし(人々が指摘したように):

  • インラインを使用する場合は、&文字を追加する必要があります。
    your commands here & :: commenttttttttttt
  • ネストされたロジック(IF/ELSEFORループなど)の内部では、エラーが発生するREMため使用::します。
  • :: 内で失敗するかもしれません setlocal ENABLEDELAYEDEXPANSION

79
二重コロン::は、最もクリーンな.batコメントです。そして、それは行の最初または途中で使用できます!
ATSiem 2013

10
このようにインラインで行うと、私にはうまくいきませんでした。 cd "C:\Folder" ::this throws a syntax error
Shaun Rowan

3
またgit add :: blah this is not a comment、「致命的:pathspec 'blah'はどのファイルとも一致しませんでした」で失敗します
Bob Stein

19
例が示すのと同じ行のコメントについては&、コードとコメントの間に追加する必要があります::。説明のために、cmdプロンプトを開いてdir ::blah、内容を一覧表示しないで実行.dir & ::blah、と比較します
Rado

19
使用して警告、::との意志のバグスクリプトをsetlocal ENABLEDELAYEDEXPANSIONfor
アゼベド

50

いいえ、プレーンな古いバッチファイルREMはコメントとして使用されます。 ECHO画面に何かを出力するコマンドです。

ファイルのセクションを「コメント化」するには、を使用しますGOTO。これらすべてのコマンド/テクニックの例:

REM it starts here the section below can be safely erased once the file is customised
ECHO Hey you need to edit this file before running it!  Check the instructions inside
ECHO Now press ctrl-c to interrupt execution or enter to continue
PAUSE
REM erase the section above once you have customised the file
python executed1.py
ECHO Skipping some stuff now
GOTO End
python skipped1.py
python skipped2.py
:END
python executed2.py

何と言えばいい?バッチファイルは、昔の遺物であり、不格好で醜いものです。

あなたはこのウェブサイトでもっと読むことができます。

編集:例を少し変更して、明らかに探している要素が含まれるようにしました。


31

コンピュータの速度がそれほど速くなかった時代には、REMの代わりに::を使用することが望ましい。REMされた行は読み取られてから無視されます。::された行はすべて無視されます。これにより、「昔」のコードを高速化できます。さらに、REMの後にはスペースが必要です。::の後には必要ありません。

また、最初のコメントで述べたように、必要に応じて任意の行に情報を追加できます。

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

パーツの飛ばしも。REMをすべての行の前に配置すると、かなり時間がかかる場合があります。前述のように、GOTOを使用して部分をスキップすることは、大きなコードの部分をスキップする簡単な方法です。コードを継続させたいポイントに必ず:LABELを設定してください。

SOME CODE

GOTO LABEL  ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL

SOME CODE TO SKIP
.
LAST LINE OF CODE TO SKIP

:LABEL
CODE TO EXECUTE

1
二重コロンの行を読み取らずに無視するにはどうすればよいですか?インタプリタは最初にその行を読み取ってから、それをダブルコロン行として認識してはいけませんか?
Rob Kennedy

2
@RobKennedyが答えを読んでも、REMの後のすべてが読み取られる::の後は何も読み取りません。
James Jenkins

5
コマンドインタープリター @Jamesの読み取りを停止すると、それ以上ファイルが実行されることはありません。コメントの終了位置とファイルの次の行の開始位置を見つけるために、読み続ける必要があるのは明らかです。それはそれ::rem同じように行わなければなりません。
ロブ・ケネディ

2
@RobKennedy、私はそれがコマンドがあった行にのみ適用されることも暗示されていると思いました。
James Jenkins

7
@RobKennedy 読み取りは行いますが、読み取った内容を解析(または処理)しません。次の行までスキップして、\n再度解析を開始します[引用が必要]
xDaizu

25

複数行コメント

コメントアウトしたい行が多い場合は、すべての行をコメントアウトするよりも、複数行コメントを作成できる方が良いでしょう。

Rob van der Woudeによるコメントブロックのこの投稿を参照してください。

バッチ言語にはコメントブロックはありませんが、効果を達成する方法はあります。

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

GOTOLabelと:Labelを使用して、ブロックコメントを作成できます。

または、コメントブロックがバッチファイルの最後にある場合はEXIT、コードの最後にコメントを記述してから、コメントをいくつでも記述できます。

@ECHO OFF
REM Do something
  •
  •
REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later
EXIT

Start of comment block at end of batch file
This line is comment.
And so is this line.
And this one...

これは、ハイブリッドバッチおよびVBS / JSスクリプトでよく使用されifますが、goto stackoverflow.com / q / 9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
phuclvの

13

コマンドを使用して同じ行にコメントを付ける:使用 & :: comment

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

説明:

&は2つのコマンドを分離するため、この場合color Cは最初のコマンドで:: set red font color2番目のコマンドです。


重要:

コメント付きのこのステートメントは、直感的に正しいように見えます。

goto error1         :: handling the error

しかし、それはコメントの有効な使用法ではありませんgoto最初の引数以降のすべての引数を無視するためにのみ機能します。証明は簡単です。これgotoも失敗しません。

goto error1 handling the error

しかし、同様の試み

color 17            :: grey on blue

原因不明の4つの引数にコマンドを実行して失敗したcolorコマンド:::greyonblue

次のようにのみ機能します。

color 17     &      :: grey on blue

したがって、アンパサンドは避けられません。


他の回答から、アンパサンドは必要ないと思われますか?
RoG 2017

3
@Snaptastic –この点で他の答えは実際には間違っています。最近の編集を参照してください。
miroxlav 2017

これは正しい方法のようです。それは私のIDEでコメントとして強調表示されます。
バブラオ2018年

5

::またはを使用してコメントアウトできますREM

your commands here
:: commenttttttttttt

または

your commands here
REM  commenttttttttttt

 

コマンドと同じ行で行うには、アンパサンドを追加する必要があります。

your commands here      & ::  commenttttttttttt

または

your commands here      & REM  commenttttttttttt

 

注意:

  • 使用して:: 、ネストされたロジックで(IF-ELSEFORループ、等...)エラーが発生します。そのような場合は、REM代わりに使用してください。

これはT.Toduaの答えに基づいています。彼らの答えは良いと感じましたが、いくつかの重要な詳細は省かれましたが、彼らは私の編集をロールバックしたので、私の改訂を独自の答えに変えています。
Pikamander2

Pikamander2、あなたのリビジョン(また、ユーザーによって指摘された)@Rado はそのときに回答にマージされ、そのおかげで、回答に別のスタイリングを好み、異なるスタイリングを使用しました
。– T.Todua

1

これは古いトピックです。ここに私の理解を追加して、この興味深いトピックの知識を広げたいと思います。

REMと::の主な違いは次のとおりです。

REMはコマンド自体ですが、::はそうではありません。

::をトークンとして扱うことができます。CMDパーサーが行内の最初の非空白スペースに遭遇するとすぐに、これは::トークンであり、行全体をスキップして次の行を読み取ります。そのため、行のコメントとして機能するには、REMの後に少なくとも空白が必要ですが、::の後ろには空白は必要ありません。

REMがコマンド自体であることは、次のFOR構文から最もよく理解できます。

基本的なFOR構文は次のとおりです

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

ここ<Command>に任意の有効なコマンドを指定できます。したがってrem、コマンドとして次の有効なコマンドラインを記述できます。

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

ただし、::コマンドではないため、次の行は記述できません。

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

3
技術的に::は(無効な)ラベル(動作を説明している)なので、使用しないでください(まだ一般的ですが)
Stephan

1

次の構文を使用して、バッチファイルの最後にコメントを追加できます。

@echo off
:: Start of code
...
:: End of code

(I am a comment
So I am!
This can be only at the end of batch files

閉じ括弧は絶対に使用しないでください。

帰属:https ://www.robvanderwoude.com/comments.phpのLeo Guttirez Ramirez

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.