FORステートメントは、コマンドを複数回「ループ」または繰り返すことができるコマンドです。これは、いくつかのプログラミング言語で提供されているFORステートメントと非常によく似ています。 FORステートメントはバッチファイルでよく使用されますが、コマンドラインで直接使用することもできます。

注意として、FORループの一般的な形式は次のとおりです。

FOR %variable IN (set) DO command [command-parameters]

「variable」は1文字、「(set)」は1つ以上のファイルのセットを指定し、「command」はセット内の各ファイルに対して実行されるコマンドプロンプトコマンドであり、「command-parameters」はオプションです。 ‘コマンド’に渡されるパラメータ。

したがって、Windowsのレジストリに登録する必要のあるいくつかのCOM.dllファイルが与えられたとしましょう。それらをすべて1つのフォルダーに入れて、そのフォルダー内から次のコマンドを実行できます。

C:\DLLs> FOR %i IN (*.dll) DO regsvr32 /s %i

これが行うことは、現在のディレクトリで見つかった.dllファイルごとに、そのファイルでテレピン32プログラムを実行することです。 (「/ s」スイッチは、単にその作業をサイレントに実行するようにPASSWORD32に指示します。)使用される変数(「%i」)は大文字と小文字を区別し、各.dllファイルの値を順番に想定します。次に、.dllファイルの名前が同じ「%i」変数を使用してق32プログラムに渡されます。

一般的なFORループの変形は、/ Lスイッチを使用し、次の一般的な形式になります。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

これにより、%variableが最初に「start」に設定され、値「end」に達するまで「step」だけインクリメントされるループが実行されます。 (この使用法は、プログラマーにとっては_非常に_なじみのあるものでなければなりません。)したがって、1から5までの数字のリストを表示する必要があるとしましょう。

C:\> FOR /L %i IN (1,1,5) DO @echo %i

FORループの別の変形は/ Dスイッチを使用し、次の一般的な形式を持っています:

FOR /D %variable IN (set) DO command [command-parameters]

このバリアントでは、「set」にワイルドカードが含まれている場合、コマンドはファイル名ではなくディレクトリ名で機能します。これは、たとえば、ディレクトリツリーからファイルのセットをコピーして、すべてのファイルを1つのディレクトリに配置する場合に役立ちます。

たとえば、\ Tempというディレクトリがあります。これには、\ Temp \ Temp2および\ Temp \ Barryというサブディレクトリが含まれています。 \ Temp \ Barryおよび\ Temp \ Temp2ディレクトリには、コピーしたいファイルが含まれています。 \ Tempツリー内のすべてのファイル(ディレクトリ構造なし)を\ Filesというディレクトリにコピーしたい場合は、次のように実行できます。

C:\Temp> FOR /D %i IN () DO Copy %i\.* \Files

私が思うに、FORループの最も難解な形式を最後まで残しました。 / Fスイッチを使用すると、使用方法しかわからない場合は、ほとんど何でもできるようです。一般的な形式は次のとおりです。

FOR /F "options" %variable IN (`command`) DO command [command-parameters]

(申し訳ありませんが、すべてが1行に収まるわけではありません。)使用できる ‘オプションはいくつかあり、最初の’コマンド ‘(後方のアポストロフィで囲まれたもの)は、任意のコマンドプロンプトコマンドにすることができます。したがって、これを使用する方法の一例を次に示します。

FOR /F "Usebackq Delims==" %i IN (`dir/b c:\temp\a*.tmp`) DO @echo c:\temp\%i | Findstr /f:/ "a b c"

(申し訳ありませんが、すべてが1行に収まるわけではありません。)このコマンドは、C:\ Temp \ A.tmpでDIR / Bコマンドを実行します。見つかったファイルごとに、ファイル名をエコーし​​てFindstrコマンドにパイプします。このコマンドは、「a」、「b」、または「c」を含むすべての行を検索します。かなり奇妙なことですが、少なくとも/ Fの使い方を示しています。 FOR /?*を実行して、すべてのオプションの完全なリストを取得することをお勧めします。そうすれば、基本的に、それを使用する方法を理解することについての想像力にのみ拘束されます。

バッチファイル内でFORコマンドを使用することもできます。唯一の違いは、%記号を2倍にすることですが、コマンドラインでは1つの%記号しか使用しません。たとえば、上記の2番目の例をバッチファイルに配置すると、次のようになります。

FOR /L %%i IN (1,1,5) DO @echo %%i

このヒント(13196)は、Windows 7、8、および10に適用されます。