一連のファイル内で、各ファイルに対して指定されたコマンドを実行します。
Syntax
for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]
Parameters
| Parameter | Description |
|---|---|
{%% \| %}<variable> |
Required. 置換可能なパラメーターを表します。 コマンドプロンプトで % コマンドを実行するには、1 パーセント記号 () を使用します。 二重パーセント記号 (%%) を使用して、バッチ ファイル内で for コマンドを実行します。 変数は大文字と小文字を区別し、 %a、 %b、 %cなどのアルファベット値で表す必要があります。 |
(<set>) |
Required. 1 つ以上のファイル、ディレクトリ、テキスト文字列、またはコマンドを実行する値の範囲を指定します。 かっこは必須です。 |
<command> |
Required. 各ファイル、ディレクトリ、またはテキスト文字列に対して、または set に含まれる値の範囲に対して実行するコマンドを指定します。 |
<commandlineoptions> |
指定したコマンドで使用するコマンド ライン オプションを指定します。 |
| /? | コマンド プロンプトにヘルプを表示します。 |
Remarks
このコマンドは、バッチ ファイル内で使用することも、コマンド プロンプトから直接使用することもできます。
for コマンドには、次の属性が適用されます。
このコマンドは、指定したコマンドがすべてのファイルを処理するまで、
% variableまたは%% variableを、指定したセット内の各テキスト文字列に置き換えます。変数名は大文字と小文字が区別され、グローバルであり、一度にアクティブにできる値は 52 個以下です。
バッチ・パラメーターとの混同を避けるために、
%0から%9まで、 変数 には数字 0 から 9 を除く任意の文字を使用できます。 単純なバッチ ファイルの場合、%%fなどの 1 文字が機能します。複雑なバッチ・ファイル内の 変数 に複数の値を使用して、異なる置換可能な変数を区別できます。
set パラメーターは、ファイルの 1 つのグループまたは複数のファイル グループを表すことができます。 ワイルドカード文字 (* と ?) を使用して、ファイル・セットを指定できます。 有効なファイル セットを次に示します。
(*.doc) (*.doc *.txt *.me) (jan*.doc jan*.rpt feb*.doc feb*.rpt) (ar??1991.* ap??1991.*)このコマンドを使用すると、 set の最初の値が
% variableまたは%% variableに置き換わり、指定されたコマンドがこの値を処理します。 これは、 設定 値に対応するすべてのファイル (またはファイルのグループ) が処理されるまで続きます。in と do はパラメーターではありませんが、このコマンドで使用する必要があります。 これらのキーワードのいずれかを省略すると、エラー メッセージが表示されます。
コマンド拡張が有効になっている場合 (デフォルト)、次の追加形式の for がサポートされます。
ディレクトリのみ:set にワイルドカード文字 (* または ?) が含まれている場合、set に一致するディレクトリごとに、指定されたコマンドが実行されます (指定されたディレクトリ内のファイルのセットではなく)。 構文は次のとおりです。
for /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]リカーシブ:drive:path をルートとするディレクトリツリーをウォークし、ツリーの各ディレクトリで for ステートメントを実行します。 /r の後にディレクトリが指定されていない場合は、現在のディレクトリがルートディレクトリとして使用されます。 set が 1 つのピリオド (.) のみの場合、ディレクトリ ツリーのみを列挙します。 構文は次のとおりです。
for /r [[<drive>:]<path>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]値の範囲を反復処理する: 反復変数を使用して開始値 (start#) を設定し、値が設定された終了値 (end#) を超えるまで値のセット範囲をステップ実行します。 /l は、 start# と end# を比較して反復を実行します。 start# が end# より小さい場合、コマンドが実行されます。 反復変数が end#を超えると、コマンドシェルはループを終了します。 負の ステップ#を使用して、値が減少する範囲をステップスルーすることもできます。 例えば、 ( 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> [<commandlineoptions>]反復処理とファイル解析: ファイル解析を使用して、コマンドの出力、文字列、およびファイルの内容を処理します。 反復変数を使用して、調別するコンテンツまたはストリングを定義し、さまざまな parsingkeywords オプションを使用して構文解析をさらに変更します。 parsingkeywords トークン・オプションを使用して、反復変数として渡すトークンを指定します。 token オプションなしで使用すると、 /f は最初のトークンのみを調べます。
ファイルの解析は、出力、文字列、またはファイルの内容を読み取り、それを個々のテキスト行に分割し、各行を 0 個以上のトークンに解析することで構成されます。 次に、 for ループは、反復変数の値をトークンに設定して呼び出されます。 デフォルトでは、 /f は各ファイルの各行から最初の空白の区切りトークンを渡します。 空白行はスキップされます。
構文は次のとおりです。
for /f [<parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>] for /f [<parsingkeywords>] {%%|%}<variable> in (<literalstring>) do <command> [<commandlineoptions>] for /f [<parsingkeywords>] {%%|%}<variable> in ('<command>') do <command> [<commandlineoptions>]set 引数は、1 つ以上のファイル名を指定します。 各ファイルは、 セット内の次のファイルに移動する前に、開かれ、読み取られ、処理されます。 デフォルトの構文解析動作をオーバーライドするには、 parsingkeywords を指定します。 これは、異なる解析オプションを指定する 1 つ以上のキーワードを含む引用符で囲まれた文字列です。
usebackq オプションを使用する場合は、次のいずれかの構文を使用します。
for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>] for /f [usebackq <parsingkeywords>] {%%|%}<variable> in ('<literalstring>') do <command> [<commandlineoptions>] for /f [usebackq <parsingkeywords>] {%%|%}<variable> in (`<command>`) do <command> [<commandlineoptions>]次の表に、 parsingkeywords に使用できる構文解析キーワードを示します。
Keyword Description eol= <c>行の末尾 (1 文字のみ) を指定します。 skip= <n>ファイルの先頭でスキップする行数を指定します。 delims= <xxx>区切り記号セットを指定します。 これにより、スペースとタブの既定の区切り記号セットが置き換えられます。 tokens= <x,y,m-n>各行のどのトークンをイテレーションごとに for ループに渡すかを指定します。 その結果、追加の変数名が割り当てられます。 m-n は、 m番目のトークンから n番目のトークンまでの範囲を指定します。 tokens= ストリングの最後の文字がアスタリスク (*) の場合、追加の変数が割り当てられ、解析された最後のトークンの後の行の残りのテキストを受け取ります。 usebackq バッククォート文字列をコマンドとして実行するか、リテラル文字列として単一引用符で囲んだ文字列を使用するか、スペースを含む長いファイル名の場合は、 <set>内のファイル名を二重引用符で囲みます。変数の置換: 次の表に、オプションの構文を示します (変数 I の場合)。
修飾子を持つ変数 Description %~I周囲の引用符を削除する %Iを展開します。%~fI%Iを完全修飾パス名に展開します。%~dI%Iをドライブ文字のみに展開します。%~pI%Iをパスのみに展開します。%~nI%Iをファイル名のみに展開します。%~xIファイル名拡張子のみに %Iを展開します。%~sIパスを展開して、短い名前のみを含めます。 %~aI%Iをファイルのファイル属性に展開します。%~tI%Iをファイルの日付と時刻に展開します。%~zIファイルのサイズに %Iを展開します。%~$PATH:IPATH 環境変数に一覧表示されているディレクトリを検索し、見つかった最初のディレクトリの完全修飾名に %Iを展開します。 環境変数名が定義されていない場合、または検索でファイルが見つからない場合、この修飾子は空の文字列に展開されます。次の表に、複合結果を取得するために使用できる修飾子の組み合わせを示します。
結合された修飾子を持つ変数 Description %~dpI%Iをドライブ文字とパスのみに展開します。%~nxIファイル名と拡張子のみに %Iを展開します。%~fsI%Iを、短い名前のみを使用して完全なパス名に展開します。%~dp$PATH:IPATH 環境変数に一覧表示されている %Iのディレクトリを検索し、最初に見つかったドライブ文字とパスに展開します。%~ftzaI%Iを dir のような出力行に展開します。上記の例では、
%Iと PATH を他の有効な値に置き換えることができます。 変数名が有効な場合、%~構文が終了します。%Iなどの大文字の変数名を使用すると、コードの読みやすさを高め、大文字と小文字を区別しない修飾子との混同を回避できます。
文字列の解析:
for /f解析ロジックは、<literalstring>を二重引用符 (usebackq を使用しない) または単一引用符 (usebackq) (MyString) や ('MyString' など) でラップすることで、即時文字列で使用できます。<literalstring>は、ファイルからの 1 行の入力として扱われます。<literalstring>を二重引用符で囲って解析する場合、(\ & | > < ^) などのコマンド シンボルは通常の文字として扱われます。出力の解析:
for /fコマンドを使用して、括弧の間にバック引用符で囲まれた<command>を配置することで、コマンドの出力を解析できます。 これは、子 Cmd.exeに渡されるコマンド ラインとして扱われます。 出力はメモリにキャプチャされ、ファイルであるかのように解析されます。
Examples
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 が残りのすべてのトークンを取得するを参照します。 指定するファイル名にスペースが含まれている場合は、テキストを引用符で囲みます (ファイル名など)。 引用符を使用するには、 usebackq を使用する必要があります。 それ以外の場合、引用符は解析するリテラル文字列を定義すると解釈されます。
%i は for ステートメントで明示的に宣言されています。 %j と %k は、 tokens= を使用して暗黙的に宣言されます。 tokens= を使用して、文字 z または Z より大きい変数を宣言しようとしない限り、最大 26 個のトークンを指定できます。
括弧の間に set を配置してコマンドの出力を解析するには、次のように入力します。
for /f "usebackq delims==" %i in (`set`) do @echo %i
サブディレクトリを含むディレクトリ内のすべてのファイルの再帰ループを実行し、完全パスをエコーするには、最後に変更されたとき、ファイル サイズを次のように入力します。
for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA