web-dev-qa-db-ja.com

バッチ/ cmdで "コメントアウト"(コメントを追加)するにはどうすればいいですか?

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

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

  2. また、実行前にバッチファイルで更新する必要がある変数について特に注意を払うためのコメントを追加したいと思います。私はREMを使うことができると思います。しかし、それは彼らがそれを実行した後の進行状況でユーザーを更新するためのものであるように見えます。

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

745
user1397044

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

だから、あなたのバッチファイルでは、これを使用することがあります:

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

::またはREM

::   commenttttttttttt
REM  commenttttttttttt

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

  • インラインを使用する場合は、&文字を追加する必要があります。
    your commands here & :: commenttttttttttt
  • IF/ELSEはエラーを返すので、ネストされたロジック(::FORループなど)の内部ではREMを使用します。
  • ::setlocal ENABLEDELAYEDEXPANSION内で失敗する可能性があります 
787
T.Todua

いいえ、普通のバッチファイルはコメントとして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

何と言えばいい?バッチファイルは古くなった時代の遺物で、不格好で醜いものです。

もっと読むことができます このウェブサイト上で

編集:見本と思われる要素を含むように例を少し修正しました。

42
fvu

REMの代わりに::が使われるのは、コンピュータがあまり速くなかった頃の時代に使われたものです。 ::行を無視します。これは "昔"にあなたのコードをスピードアップすることができます。 REMの後にさらにスペースが必要です。::の後には必要ありません。

そして最初のコメントで述べたように:あなたはあなたがする必要があると感じるどんな行にでも情報を追加することができます

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

部品のスキップに関してはすべての行の前にREMを置くのはかなり時間がかかります。コードの断片コードを継続させたい位置に必ず: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
28
Kees

複数行コメント

コメントアウトしたい行が多数ある場合は、すべての行をコメントアウトするのではなく、複数行のコメントを付けることができればより良いでしょう。 

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

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

ブロックコメントを作るためにGOTO Labelと: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...

コメント元

22
Somnath Muluk

コマンドと同じ行にコメントを書く:use & :: comment

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

説明:

&は2つのコマンドを分離します したがって、この場合はcolor Cが最初のコマンドで、:: set red font colorが2番目のコマンドです。


重要:

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

goto error1         :: handling the error

しかし、それは ではありません - コメントの有効な使用法 gotoが最初の引数より後のすべての引数を無視するからです。証明は簡単です。このgotoは失敗することもありません。

goto error1 handling the error

しかし同様の試み

color 17            :: grey on blue

colorコマンドには不明な4つの引数があるため、コマンドの実行に失敗しました:::greyonblue

それだけで動作します:

color 17     &      :: grey on blue

アンパサンドは避けられません。

12
miroxlav

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

your commands here
:: commenttttttttttt

または

your commands here
REM  commenttttttttttt

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

your commands here      & ::  commenttttttttttt

または

your commands here      & REM  commenttttttttttt

注意:

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

これは古いトピックであり、この興味深いトピックの知識を広げるためにここに私の理解を加えたいと思います。 

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

REMはコマンドそのものですが、::はNOTです。 

CMDパーサーがthis :: tokenである行の最初の非空白スペースに出会うとすぐに::をトークンとして扱うことができ、それは単に行全体をスキップして次の行を読むでしょう。そのため、REMの後に行のコメントとして機能できるようにするには、少なくとも空白を1つ入れる必要がありますが、::の後ろに空白は必要ありません。

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

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

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

ここで<Command>は任意の有効なコマンドです。 remname__はコマンドであるため、次の有効なコマンドラインを記述できます。

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

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

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