Windowsバッチファイルではどのようにループしますか?


回答:


128
FOR %%A IN (list) DO command parameters

list は、スペース、コンマ、またはセミコロンで区切られた要素のリストです。

コマンド は、任意の内部コマンドまたは外部コマンド、バッチファイル、さらにはOS / 2およびNTでは、コマンドのリストです。

パラメータに は、コマンドのコマンドラインパラメータが含まれています。この例では、コマンドは、指定されている場合はパラメーターを使用して、リスト内のすべての要素に対して1回実行されます。

特殊なタイプのパラメーター(またはコマンド)は%% Aであり、リストの各要素によって連続的に置換されます。

FORループから


3
リストに範囲(1〜100)を指定できますか?
プラディープ、

36
FOR /L %x IN (1,1,100) DO ...
ジョーイ

ループ[ parameters ]に複数の行を含める場合は、括弧を囲みforます
フランクブライス

1
@aaiezza、私はあなたの意見の2番目です。私は今、これらの血まみれのループと戦っており、完全に予期せず動作しており、出力を見て何を制御しているのかわかりません。恐ろしいもの。便利ですが、恐ろしいです。
RockDoctor

224

あなたが何かをx回したい場合は、これを行うことができます:

例(x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 手段:

  • 開始= 1
  • ステップあたりの増分= 1
  • 終了= 200

17
追加していただきありがとうございます。例の開始値を増分とは異なるものに変更すると、より明確になる場合があります。
ウォーレンスティーブンス

7
最終値は包括的です。
Roland Pihlakas 16

54

タイプ:

for /?

すると、数ページのヘルプテキストが表示されます。


8
これは、DOS / Windowsのさまざまなバージョンを処理するため、受け入れられた回答よりもこの方法を好みます。「For」は長年にわたって非常に大幅に強化されており、問題はどのバージョンがターゲットにされているのか、どのシナリオが試行されているのかを示していません。
マティアス・アンダーソン

34

コマンドを条件付きで数回実行します。

  • 構文-FOR-ファイル

    FOR %%parameter IN (set) DO command 
    
  • syntax-FOR-Files-Rooted at Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • syntax-FOR-Folders

    FOR /D %%parameter IN (folder_set) DO command 
    
  • syntax-FOR-数値のリスト

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • syntax-FOR-Fileの内容

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    または

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • syntax-FOR-Commandの結果

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

それ

  • 一連のデータを取る
  • FORパラメータ%%Gをそのデータの一部に等しくする
  • コマンドを実行します(オプションで、コマンドの一部としてパラメーターを使用します)。
  • ->データのアイテムごとに繰り返します

バッチプログラムではなくコマンドラインでFORコマンドを使用する場合は、の%G代わりにパーセント記号を1つだけ使用します%%G

FORパラメータ

  • 最初のパラメーターは、文字Gなどの単一の文字を使用して定義する必要があります。

  • FOR %%G IN ...

    FORループの各反復で、IN ( ....)句が評価%%Gされ、異なる値に設定されます

    この句の結果が単一の値になる場合、%% Gはその値に等しく設定され、コマンドが実行されます。

    句の結果が複数の値になる場合、追加のパラメータが暗黙的に定義され、それぞれが保持されます。これらは自動的にアルファベット順に割り当てられ%%H %%I %%Jます...(暗黙のパラメーター定義)

    パラメータがファイルを参照している場合、拡張変数参照を使用して、ファイル名/パス/日付/サイズを抽出できます。

    もちろん、アルファベット以外の任意の文字を選択でき%%Gます。しかし、パス名形式の文字(a、d、f、n、p、s、t、x)と競合せず、暗黙的なパラメーターとして使用するための競合しない文字の最長の実行を提供するため、これは良い選択です。


1
forループを使用して、以前に設定された変数内に入るにはどうすればよいですか?/ F "tokens = 2 delims =、" %% i in(%a%)do(…..しかしこれは機能しません。 "(現時点では予期されていなかった"と言って失敗しました
Shivani

こんにちは。された%a%通常のファイルの名前を与えますか?この形式であなたを助けるのは難しいです。How to Askを読んだ後、気軽に新しい質問をしてください
J.チョメル

2
@ jumping_monkey、FORコマンドは、数値ではなく文字で識別されるパラメーター変数を作成します(例:%% G)。パス形式のパラメータ拡張もこれらに適用できます。2つの文字セット間の混乱を避けるために、文字(a、d、f、n、p、s、t、x、z)をFORパラメータとして使用しないか、大文字のFORパラメータ文字を選択してください。
J.チョメル

こんにちは@ J.Chomel、ありがとうございますSo for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(こちら)[ ss64.com/nt/syntax-args.html)。歓声メイト。
jumping_monkey


13

このコードを試してください:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1は、増分num2する数値で、追加されるnum1値で、ターミネーターは、終了する値num1です。このステートメントでは、ターミネータに別の値を指定できます(if %num1%==%terminator% goto close)。これはブール式です。ブール値がtrueの場合はgoto closeがプロセスであり、ブール値がfalseの場合はgoto openがプロセスです。


これは理解するのが最も簡単です。他の答えは、コマンドとフラグが何をするかについてほとんど説明を与えません。JavaScriptのみの種類の人にとって、バッチファイルはまったく直感的ではありません。
1934286

5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit

5

FOR /?ヘルプドキュメントから:

FOR%variable IN(セット)DOコマンド[コマンドパラメータ]

%variable 1文字の置き換え可能なパラメーターを指定します。
(セット)1つ以上のファイルのセットを指定します。ワイルドカードを使用できます。command各ファイルに対して実行するコマンドを指定します。
command-parameters
指定したコマンドのパラメーターまたはスイッチを指定します。

バッチプログラムでFORコマンドを使用するに
は、%variable ではなく%% variableを指定します。変数名では大文字と小文字が区別されるため、%iは%Iとは異なり
ます。

コマンド拡張機能が有効な場合
、FORコマンドの次の追加形式がサポートされます。

FOR / D%variable IN(セット)DOコマンド[コマンドパラメータ]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[drive:] path]%variable IN(set)DO command [command-parameters]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L%variable IN(開始、ステップ、終了)DOコマンド[コマンドパラメータ]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.