1. ホーム
  2. batch-file

[解決済み] cmdファイルにおける%と%%の違いは何ですか?

2022-12-03 19:36:55

質問

最近、.cmd ファイルにこのような行を含めました。

for /f %%f in ('dir /b .\directory\*.sql') DO sqlcmd -b -o ".\directory\output\%%f.txt" -i ".\directory\%%f"

元々私は%fしか使っておらず、コマンドラインで実行するとうまくいくのですが、ファイルを通して実行するとうまくいきませんでした。 %%f に切り替えたら、ファイル内で動作しました。 ただ、この違いは何なのかが気になります。

どのように解決するのですか?

(詳細な説明は マイクロソフト KB のアーカイブ記事 .)

知っておきたい3つのこと

  1. パーセント記号は、バッチ ファイルでコマンド ライン パラメータを表すために使用されます。 %1 , %2 , ...
  2. 2つのパーセント記号とその間にある任意の文字は、変数として解釈されます。

    echo %myvar%

  3. 2%記号 なし の間にあるものは、(バッチファイルではなく)コマンドの1つのパーセント記号と同じように扱われます。 %%f

どうしてですか?

例えば、あなたの(簡略化した)コマンドラインを実行すると、次のようになります。

FOR /f %f in ('dir /b .') DO somecommand %f

をバッチファイルの中に入れてください。 ルール2 を解釈しようとします。

%f in ('dir /b .') DO somecommand %

を変数として使用することができます。それを防ぐためには、変数に ルール3 を適用し、エスケープして % を、2つ目の % :

FOR /f %%f in ('dir /b .') DO somecommand %%f