一連のファイル内で、各ファイルに対して指定されたコマンドを実行します。
構文
for {%% | %}<variable> in (<set>) do <command> [<commandlineoptions>]
パラメーター
パラメーター | 説明 |
---|---|
{%% \| %}<variable> |
必須。 置換可能なパラメーターを表します。 コマンド プロンプトで % コマンドを実行するには、1 つのパーセント記号 () を使用します。 バッチ ファイル内で %% 実行するには、二重パーセント記号 () を使用します。 変数は大文字と小文字が区別され、%a、%b、%cなどのアルファベット順の値で表す 必要があります。 |
(<set> ) |
必須。 1 つ以上のファイル、ディレクトリ、テキスト文字列、またはコマンドを実行する値の範囲を指定します。 かっこは必須です。 |
<command> |
必須。 各ファイル、ディレクトリ、テキスト文字列、または set に含まれる値の範囲で実行するコマンドを指定します。 |
<commandlineoptions> |
指定したコマンドで使用するコマンド ライン オプションを指定します。 |
/? | コマンド プロンプトにヘルプを表示します。 |
注釈
このコマンドは、バッチ ファイル内で使用することも、コマンド プロンプトから直接使用することもできます。
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 /d {%%|%}<variable> in (<set>) do <command> [<commandlineoptions>]
リカーシブ:drive:path をルートとするディレクトリ ツリーをウォークし、ツリーの各ディレクトリで for ステートメントを実行します。 /r の後にディレクトリが指定されていない場合は、現在のディレクトリがルート ディレクトリとして使用されます。 set が単一のピリオド (.) の場合、ディレクトリ ツリーのみが列挙されます。 構文は次のとおりです。
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 トークン オプションを使用して、反復変数として渡すトークンを指定します。 トークン オプションなしで使用すると、 /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 に使用できる解析キーワードを示します。
キーワード 説明 EOL= <c>
行の末尾 (1 文字のみ) を指定します。 スキップ= <n>
ファイルの先頭でスキップする行数を指定します。 delims= <xxx>
区切り記号セットを指定します。 これにより、スペースとタブの既定の区切り記号セットが置き換えられます。 トークン= <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
PATH 環境変数に一覧表示されている %I
のディレクトリを検索し、最初に見つかったドライブ文字とパスに展開します。%~ftzaI
%I
を dir のような出力行に展開します。上記の例では、
%I
と PATH を他の有効な値に置き換えることができます。 変数名 に有効 な場合は、 %~ 構文が終了します。%I
などの大文字の変数名を使用すると、コードの読みやすさを高め、大文字と小文字を区別しない修飾子との混同を回避できます。
文字列の解析:
for /f
解析ロジックは、<literalstring>
を二重引用符 (usebackq を使用しない) または単一引用符 (usebackq) (MyString) や ('MyString' など) でラップすることで、即時文字列で使用できます。<literalstring>
は、ファイルからの 1 行の入力として扱われます。<literalstring>
を二重引用符で囲って解析する場合、(\ & | > < ^
) などのコマンド シンボルは通常の文字として扱われます。出力の解析:
for /f
コマンドを使用すると、かっこの間にバッククォートされた<command>
を配置することで、コマンドの出力を解析できます。 これは、子 Cmd.exeに渡されるコマンド ラインとして扱われます。 出力はメモリにキャプチャされ、ファイルであるかのように解析されます。
例示
バッチ ファイルで使用 するには、次の構文を使用します。
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の各行を解析します。 セミコロンで始まる行は無視され、各行から for 本文に 2 番目と 3 番目のトークンが渡されます (トークンはコンマまたはスペースで区切られます)。 for ステートメント参照の本文は、2 番目のトークンを取得するために %i し、3 番目 のトークンを取得 %j、残りのトークンをすべて取得%k。 指定するファイル名にスペースが含まれている場合は、テキストを引用符で囲みます (ファイル名など)。 引用符を使用するには、 usebackq を使用する必要があります。 それ以外の場合、引用符は解析するリテラル文字列を定義すると解釈されます。
%i は 、for ステートメントで明示的に宣言されています。 %j と %k は、 tokens= を使用して暗黙的に宣言されます。 文字 z または Z より大きい変数を宣言しようとしない場合は、 tokens= を使用して最大 26 個のトークンを指定できます。
かっこの間に set を配置してコマンドの出力を解析するには、次のように入力します。
for /f "usebackq delims==" %i in (`set`) do @echo %i
サブディレクトリを含むディレクトリ内のすべてのファイルの再帰ループを実行し、完全パスをエコーするには、最後に変更されたとき、ファイル サイズを次のように入力します。
for /r "C:\My Dir\" %A in (*.*) do echo %~ftzA