2021/03/21

Windows batchで一部分的だけ一時的にコメントアウトする方法

 Windows batchで一部分的だけ一時的に
コメントアウトする方法

2021/03/21 TubeP

あ…ありのまま、今、起こった事を話すぜ!ほんとどなたかすっきりした解説をしてください。

Windows batchファイルはうp主的に難易度高いので、試行錯誤を繰り返してます。その時にお世話になったのが、一部分だけ一時的にコメントアウトする方法です。


方法


BATCHファイルの一時的にコメントアウトしたい部分(実行させたくない部分)の前の行として、

(

というカッコ一文字だけの行を追記します。同じくコメントアウトしたい部分の次の行に

)|echo "スクリプト中の ( から ) までを跳ばしました." 

を挿入します。echoの後ろの文字列はなんでも構いません。
あと、挟まれた部分にどこでもいいから1回でも rem 文を入れておきます。

この技法(トリック?)を使うとコメントアウト部分を削除しなくて済むので、特にデバッグ時には便利(某言語でのifdef文の感覚ですね)。
ただし可読性は猛烈に悪いので、デバッグ中など本当に一時的な作業にしかお勧めできませんねぇ。

これについてはにわかには信じがたいと思うので、以下に動作確認用のコードをつけておきます。windows10 Version 1909で検証してます。


【00: 通常のコードブロック利用】

丸カッコで括った範囲はコードブロックと呼ばれるようです。括っただけですから、実行されるのは当然です。

@echo off

echo Commands will be executed.
echo %DATE%
echo %TIME%

rem 
(
  echo Executing the line. >  result-00executed.txt
  echo %TIME%              >> result-00executed.txt
  echo OK, it is good.     >> result-00executed.txt
)
echo End of the %0 .
cmd /k

実行すると、同じフォルダ内にresult-00executed.txtが生成され、echo3行分の出力がされているはずです。

Executing the line. 
14:01:04.37              
OK, it is good. 
 
 


【01: rem文の追加】

対象のコードブロックにrem文を追加します。rem文は単なるメモですから、さきほどと同様、rem文に続くechoは 3行とも実行されるのが当然です。

@echo off

echo Commands will be executed.
echo %DATE%
echo %TIME%

rem 
(
  rem These are the target lines.
  echo Executing the line. >  result-01justrem.txt
  echo %TIME%              >> result-01justrem.txt
  echo It is still good.   >> result-01justrem.txt
)
echo End of the %0 .

cmd /k

実行すると、同じフォルダ内にresult-01justrem.txtが生成され、echo3行分の出力がされているはずです。

Executing the line. 
14:10:14.09              
It is still good.   
 

【02: echo へのパイプ】

対象のコードブロックの後ろにechoを接続します。見かけ上、コードブロックの標準出力をechoに送ることになります。後ろにつないだだけなので、それより前の挙動が変わることはないような気がします。それでも、なぜかコードブロック全体の実行がキャンセルされます。この例では、result-02pipeecho.txtは生成されずに終わります。

@echo off

echo Commands will be CANCELLED.
echo %DATE%
echo %TIME%

rem 
(
  rem These are the target lines.
  echo Executing the line. >  result-02pipeecho.txt
  echo %TIME%              >> result-02pipeecho.txt
  echo This is weird.      >> result-02pipeecho.txt
)|echo This is the trick.

echo End of the %0 .

cmd /k

挿入するrem文はコードブロックの先頭である必要はなく、最後でも途中でも有効です。rem文がなくなると、(当たり前ですが)01と同じ動作に戻って、result-02pipeecho.txtが生成されるようになります。



便利だけどこの謎技法、誰かのお役に立ちますかねぇ。
むしろ大勢の人の混乱を招くかもしれませんねぇ(笑い)。
こんなWindows環境で仕事されてる方が大勢おられるかと思うと、頭下がります。
今回はうp主は趣味の一環でbatch環境を触りましたが、いろいろおなかいっぱいでした。

0 件のコメント:

コメントを投稿