1. ホーム
  2. ウィンドウズ

[解決済み】バッチファイルではどのようなコメントスタイルを使用すればよいですか?

2022-03-29 17:21:40

質問

バッチファイルを書いていて、以下のようなことに遭遇しました。 このユーザーガイド これは非常に有益な情報です。その中で、行のコメント付けは、単に REM のみならず :: . と書いてある。

バッチコード中のコメントは、ダブルコロンを使って作ることができます。これは、ラベルがリダイレクトシンボルより先に処理されるため、REMコマンドを使うより優れています。 ::<remark> は問題ありませんが rem <remark> はエラーを発生させます。

では、なぜ私が目にするほとんどのガイドや例では、このように REM コマンドを使用します。それは :: は、すべてのバージョンのWindowsで動作しますか?

解決方法は?

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 .