対象

ファイルのセット内の各ファイルに対して指定されたコマンドを実行します。

構文

for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]

パラメーター

パラメーター 説明
{%% \| %}<variable> 必須。 置き換え可能なパラメーターを表します。 コマンド プロンプトで for コマンドを実行するには、1 つのパーセント記号 (%) を使用します。 バッチ ファイル内で for コマンドを実行するには、2 つのパーセント記号 (%%) を使用します。 変数は、大文字と小文字が区別され、%a%b%c などのアルファベット値で表す必要があります。
(<set>) 必須。 1 つ以上のファイル、ディレクトリ、またはテキスト文字列、あるいはコマンドを実行する値の範囲を指定します。 かっこが必要です。
<command> 必須。 それぞれのファイル、ディレクトリ、またはテキスト文字列、あるいは set に含まれる値の範囲に対して実行するコマンドを指定します。
<commandlineoptions> 指定したコマンドで使用するコマンドライン オプションを指定します。
/? コマンド プロンプトにヘルプを表示します。

解説

  • このコマンドは、バッチ ファイル内で使用することも、コマンド プロンプトから直接使用することもできます。

  • for コマンドには、次の属性が適用されます。

    • このコマンドは、指定されたコマンドがすべてのファイルを処理するまで、指定されたセット内の各テキスト文字列と % variable または %% variable を置き換えます。

    • 変数名は、大文字と小文字が区別され、グローバルで、一度にアクティブにできるのは 52 個までです。

    • バッチ パラメーターの %0 から %9 との混同を避けるために、variable には、数字の 0 から 9 以外の任意の文字を使用できます。 単純なバッチ ファイルの場合は、%%f などの 1 文字を使用できます。

    • 複雑なバッチ ファイルでは、variable に複数の値を使用して、複数の置き換え可能な変数を区別できます。

  • set パラメーターは、1 つのファイル グループまたは複数のファイル グループを表すことができます。 ワイルドカード文字 (*?) を使用して、ファイル セットを指定できます。 有効なファイル セットは次のとおりです。

    (*.doc)
    (*.doc *.txt *.me)
    (jan*.doc jan*.rpt feb*.doc feb*.rpt)
    (ar??1991.* ap??1991.*)
    
  • このコマンドを使用すると、set 内の最初の値が % variable または %% variable に置き換えられ、指定されたコマンドによってこの値が処理されます。 この処理は、set 値に対応するすべてのファイル (またはファイルのグループ) が処理されるまで続けられます。

  • indo は、パラメーターではありませんが、このコマンドで使用する必要があります。 これらのキーワードのいずれかを省略すると、エラー メッセージが表示されます。

  • コマンド拡張が有効になっている (既定) 場合は、for の次の追加の形式がサポートされています。

    • ディレクトリのみ:set にワイルドカード文字 (* または ?) が含まれている場合は、set と一致するディレクトリ (指定されたディレクトリ内のファイルのセットではなく) ごとに指定された command が実行されます。 の構文は次のとおりです。

      for /d {%%|%}<Variable> in (<Set>) do <Command> [<CommandLineOptions>]
      
    • 再帰的:drive:path をルートとするディレクトリ ツリーを辿り、ツリーの各ディレクトリで for ステートメントを実行します。 /r の後ろでディレクトリが指定されなかった場合は、現在のディレクトリがルート ディレクトリとして使用されます。 set が 1 つのピリオド (.) だけの場合は、ディレクトリ ツリーを列挙するだけです。 の構文は次のとおりです。

      for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      
    • 値の範囲の反復処理: 反復変数を使用して開始値 (start#) を設定してから、値が、設定された終了値 (end#) を超えるまで、設定された値の範囲をステップ実行します。 /l は、start# と end# を比較することによって反復を実行します。 start# が end# より小さい場合は、コマンドが実行されます。 反復変数が end# を超えると、コマンド シェルがループを抜けます。 負の step# を使用して、範囲を降順にステップ実行することもできます。 たとえば、(1,1,5) は 1 2 3 4 5 の順序を生成し、(5,-1,1) は 5 4 3 2 1 の順序を生成します。 の構文は次のとおりです。

      for /l {%%|%}<variable> in (<start#>,<step#>,<end#>) do <command> [<commandlinepptions>]
      
    • 反復処理とファイル解析: ファイル解析を使用して、コマンド出力、文字列、およびファイルの内容を処理します。 反復変数を使用して、検査するコンテンツまたは文字列を定義し、さまざまな parsingkeywords オプションを使用して、さらに解析を修正します。 parsingkeywords トークン オプションを使用して、反復変数として渡すトークンを指定します。 トークン オプションを指定せずに使用した場合、/f は、最初のトークンしか検査しません。

      ファイル解析は、出力、文字列、またはファイルの内容の読み取り、個別のテキスト行への分割、および各行の 0 個以上のトークンへの解析で構成されます。 その後で、トークンに設定された反復変数値を使用して、for ループが呼び出されます。 既定で、/f は、各ファイルの各行から空白で区切られた最初のトークンを渡します。 空白行はスキップされます。

      この構文は次のとおりです。

      for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlinepptions>]
      for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlinepptions>]
      

      set 引数は、1 つ以上のファイル名を指定します。 各ファイルは、set 内の次のファイルに移動する前に、開かれ、読み取られ、処理されます。 既定の解析動作をオーバーライドするには、parsingkeywords を指定します。 これは、別の解析オプションを指定するための 1 つ以上のキーワードを含む、引用符で囲まれた文字列です。

      usebackq オプションを使用する場合は、次のいずれかの構文を使用します。

      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<Set>) do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<LiteralString>') do <command> [<commandlinepptions>]
      for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlinepptions>]
      

      次の表に、parsingkeywords に使用可能な解析キーワードを示します。

      Keyword 説明
      eol=<c> 行末文字 (1 文字のみ) を指定します。
      skip=<n> ファイルの先頭からスキップする行数を指定します。
      delims=<xxx> 区切り記号セットを指定します。 これは、既定のスペースとタブの区切り記号セットを置き換えます。
      tokens=<x,y,m–n> 各反復処理の for ループに渡す各行のトークンを指定します。 結果として、追加の変数名が割り当てられます。 m-n は、m 番目から n 番目までのトークンの範囲を指定します。 tokens= 文字列内の最後の文字がアスタリスク (*) の場合は、追加の変数が割り当てられ、解析された最後のトークンの後ろの行にある残りのテキストを受け取ります。
      usebackq 逆引用符で囲まれた文字列をコマンドとして実行し、一重引用符で囲まれた文字列をリテラル文字列として使用するように指定するか、スペースを含む長いファイル名の場合は、<set> 内のファイル名のそれぞれを二重引用符で囲めるように指定します。
    • 変数の代入: 次の表に、オプションの構文 (任意の変数 I) を示します。

      変数と修飾子 説明
      %~I 囲んでいる引用符を削除する %I を展開します。
      %~fI %I を完全修飾パス名に展開します。
      %~dI %I をドライブ文字のみに展開します。
      %~pI %I をパスのみに展開します。
      %~nI %I をファイル名のみに展開します。
      %~xI %I をファイル名拡張子のみに展開します。
      %~sI 短い名前のみを含むようにパスを展開します。
      %~aI %I をファイルのファイル属性に展開します。
      %~tI %I をファイルの日付と時刻に展開します。
      %~zI %I をファイルのサイズに展開します。
      %~$PATH:I PATH 環境変数に一覧表示されたディレクトリを検索し、%I を最初に見つかったディレクトリの完全修飾名に展開します。 環境変数名が定義されていない場合やファイルが検索で見つからない場合は、この修飾子が空の文字列に展開します。

      次の表に、複合結果を取得するために使用可能な修飾子の組み合わせを示します。

      変数と結合された修飾子 説明
      %~dpI %I をドライブ文字とパスのみに展開します。
      %~nxI %I をファイル名と拡張子のみに展開します。
      %~fsI %I を短い名前の完全パス名のみに展開します。
      %~dp$PATH:I %I の PATH 環境変数に一覧表示されたディレクトリを検索し、最初に見つかったディレクトリのドライブ文字とパスに展開します。
      %~ftzaI %Idir のような出力行に展開します。

      上の例では、%I と PATH を他の有効な値に置き換えることができます。 有効な for 変数名で %~ 構文が終わります。

      %I などの大文字の変数名を使用することによって、コードを読みやすくして、大文字と小文字が区別されない修飾子との混同を避けることができます。

  • 文字列の解析: 二重引用符 (usebackq なし) または一重引用符 (usebackq あり) で <literalstring> をラップする ((MyString) や ('MyString') など) ことにより、即時の文字列に対して for /f 解析ロジックを使用できます。 <literalstring> は、ファイルからの 1 行の入力として扱われます。 二重引用符内の <literalstring> を解析する場合は、コマンド シンボル (\ & | > < ^ など) は通常文字として扱われます。

  • 出力の解析:for /f コマンドを使用すると、かっこ内の <command> に逆引用符を付けることによって、コマンドの出力を解析できます。 これは、コマンド ラインとして扱われ、子 Cmd.exe に渡されます。 出力は、メモリにキャプチャされ、ファイルであるかのように解析されます。

for をバッチ ファイル内で使用するには、次の構文を使用します。

for {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]

置換可能な変数 %f を使用して、拡張子が .doc または .txt の現在のディレクトリ内のすべてのファイルの内容を表示するには、次のように入力します。

for %f in (*.doc *.txt) do type %f

前の例では、すべてのファイルの内容が表示されるまで、現在のディレクトリ内の拡張子が .doc または .txt の各ファイルが %f 変数に置き換えられます。 このコマンドをバッチ ファイルで使用するには、%f のすべての出現箇所を %%f に置き換えます。 そうしなかった場合は、変数が無視され、エラー メッセージが表示されます。

コメント行を無視しながら、ファイルを解析するには、次のように入力します。

for /f eol=; tokens=2,3* delims=, %i in (myfile.txt) do @echo %i %j %k

このコマンドは、myfile.txt 内の各行を解析します。 セミコロンで始まる行を無視し、各行の 2 番目と 3 番目のトークンを for 本文に渡します (トークンはコンマまたはスペースで区切られます)。 for ステートメントの本文では、%i を参照して 2 番目のトークンが取得され、%j を参照して 3 番目のトークンが取得され、%k を参照して残りのすべてのトークンが取得されます。 指定したファイル名にスペースが含まれている場合は、テキストを引用符で囲みます (File Name など)。 引用符を使用するには、usebackq を使用する必要があります。 そうしなかった場合は、引用符が、解析するリテラル文字列の定義として解釈されます。

%ifor ステートメント内で明示的に宣言されます。 %j%k は、tokens= を使用して暗黙的に宣言されます。 tokens= を使用すると、文字の z または Z を超える変数を宣言しようとしなければ、最大 26 個のトークンを指定できます。

set をかっこで囲むことによってコマンドの出力を解析するには、次のように入力します。

for /f "usebackq delims==" %i in (`set`) do @echo %i

その他のリファレンス