バッチファイルをいくつか書いていたのですが、このユーザーガイド、これは非常に参考になりました。 1 つわかるのは、行は だけでなく を使ってコメント化できるということです。REM
次のように::
書かれています。
バッチ コード内のコメントは、二重コロンを使用して作成できます。これは、ラベルがリダイレクト シンボルの前に処理されるため、REM コマンドを使用するよりも優れています。
::<remark>
問題は発生しませんが、rem <remark>
エラーが発生します。
では、私が目にするほとんどのガイドや例では、なぜ コマンドが使用されているのでしょうか? Windows のすべてのバージョンで動作しますREM
か?::
ベストアンサー1
tl;dr: は、 REM
バッチ ファイルにコメントを埋め込むための文書化されサポートされている方法です。
::
は本質的にはジャンプできない空白のラベルですが、REM
は何も実行しない実際のコマンドです。どちらの場合も (少なくとも Windows 7 では) リダイレクト演算子の存在によって問題は発生しません。
ただし、::
特定の状況下では、ブロック内でラベルではなく何らかのドライブ文字として解析され、誤動作することが知られています。正確なところはよくわかりませんが、それだけでも、私はREM
のみを使用しています。これは、バッチ ファイルにコメントを埋め込むための文書化されサポートされている方法ですが、::
は特定の実装の成果物にすぎません。
::
ループ内で問題が発生する例を次に示しますFOR
。
この例は、デスクトップ上の次のファイルでは機能しません。test.bat
@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
::echo hello>C:\Users\%username%\Desktop\text.txt
)
pause
この例はコメントとして正しく機能しますが、
@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
REM echo hello>C:\Users\%username%\Desktop\text.txt
)
pause
問題は、出力をファイルにリダイレクトしようとしたときに発生するようです。おそらく、::
と呼ばれるエスケープされたラベルとして解釈されるのだと思います:echo
。