【bat】バッチで繰り返しを行う!forコマンドの使用方法をご説明

bat(バッチファイル)で繰り返しを行いたい場合は、おなじみ「for」を使用します。batのforは少し癖があるので、馴染みにくいかと思います。

しかし、batでforを使用する事によって、業務効率化する事も可能なので、是非覚えておきたいです。

その使用方法を画像などを織り交ぜ、具体的に見ていきましょう。

目次

batでforの使い方!基本構文

bat(バッチファイル) でforを使用する時の、基本の形は下記です。

for オプション %%変数1文字 in (対象) do コマンド

コマンドを複数指定したい場合は下記でもOK

for オプション %%変数1文字 in (対象) do (
 コマンド1
 コマンド2
 コマンド3
)

基本の形なので、覚えておきましょう。

%%変数1文字(%%iなど)はforの中だけで使用できる変数です。

batでforを使用するオプション4つ

batでループするにはforがあり、そのオプションは4つあります。

デフォルト(オプション無し)はカレントディレクトリの「ファイル」とする。

  1. /d ・・・対象をカレントディレクトリの「ディレクトリ」のみとする。
  2. /r ・・・対象をカレントディレクトリと、その配下のサブディレクトリの「ファイル」も含む。
  3. /l ・・・対象の値を決める
  4. /f ・・・対象をテキストファイル内にする

カレントディレクトリとは、batファイルが存在するディレクトリ(フォルダ)です。

forフォルダにfor1.batファイルがあります。ここがカレントディレクトリになります。

sub_dirディレクトリとtext1.txtファイルからtext3.txtファイルがあります。

デフォルトのforパターン

bat(バッチファイル)に下記コマンドを書いて、保存後実行してください。

@echo off
for %%i in (*) do echo %%i
pause

「*」はアスタリスクとよみ、全てを意味します。

カレントディレクトリに存在する「ファイル」が、すべて表示されています。

オプション①-ディレクトリを対象とする

/d ・・・カレントディレクトリの「ディレクトリ」を対象とする

デフォルトでは「ファイル」でしたが、カレントディレクトリにある「ディレクトリ」を対象にしたい場合には「/d」を使用します。

bat(バッチファイル)に「/d」のオプションを追記し、保存後実行してください。

@echo off
for /d %%i in (*) do echo %%i
pause

カレントディレクトリに存在する「ディレクトリ」が、すべて表示されています。

オプション②- ディレクトリ配下すべてのファイルを対象とする

/r ・・・カレントディレクトリ配下のすべての「ファイル」を対象とする

デフォルトではカレントディレクトリのみの「ファイル」でしたが、「/r」のオプションで、配下すべてのファイルが対象となります。

forカレントディレクトリ

カレントディレクトリの配下に「sub_dir」ディレクトリがあります。

「sub_dir」ディレクトリの配下には「sub_sub」ディレクトリとsub1.txt、sub2.txtファイルがあります。

「sub_sub」ディレクトリ の配下には「sub_sub1.txt」ファイルがあります。

bat(バッチファイル)に「/r」のオプションに変更し、保存後実行してください。

@echo off
for /r %%i in (*) do echo %%i
paus

カレントディレクトリ配下の全てのファイルが、表示されました。

オプション③-対象の値を決める

初期値と増加と閾値を決めて繰り返す事が出来ます。よく見るパターンだと思います。基本の形は下記になります。

for /l %%変数1文字 in (初期値,増加分,閾値) do コマンド

batファイルに下記を記入して、保存後実行して見て下さい。

@echo off
for /l %%i in (3,3,12) do echo %%i
pause

3から始まり、3ずつ増え、12を超えたら終了になっています。

オプション④-対象をテキストファイル内にする

テキスト中身の内容を対象にします。一番ややこしいですが、様々な事が可能です。基本の形は下記です。

for /f サブオプション %%i in (text1.txt) do echo %%i

オプション④には更に「サブオプション」があります。

  • tokens ・・・左から指定した番号のものを取得する。デフォルトはスペース区切り
  • delims ・・・スペース以外を区切り文字にする
  • eol ・・・指定した値から始まる行をとばす
  • skip ・・・頭から指定した数行を無視する

カレントディレクトリの「text1.txt」に、下記を記入して保存してください。

1 2 3 4
a1 b2 3b 4b
111 222 333 444
12.34.56.78

tokens ・・・n番目の文字を取得する

batファイルに下記を記入して、保存後実行して見て下さい。

@echo off
for /f "tokens=1,3" %%i in (text1.txt) do echo %%i %%j
pause

text1.txtファイルの1と3番目の文字を取得するbatファイルです。

変数を%%iと適当に決めましたが、%%iの次は%%jになります。(アルファベット順)

1 2 3 4
a1 b2 3b 4b
111 222 333 444
12.34.56.78

テキストファイルのスペース区切りの1と3番目が取得出来ています。

4行目はスペースがない為、1番目のみ表示されています。(3番目がないのにエラー出ないのはエライですね)

delims ・・・区切り文字を決めて取得する

batファイルに青「delims」のオプションを追記して、保存後実行して見て下さい。

@echo off
for /f "tokens=1,3 delims=." %%i in (text1.txt) do echo %%i %%j
pause

「.」を区切り文字として、text1.txtファイルの1と3番目の文字を取得するbatファイルです。

1 2 3 4
a1 b2 3b 4b
111 222 333 444
12.34.56.78

1から3は区切り文字「.」がない為、1番目の全てが表示されています。4行目は「.」で区切られた1と3番目を表示しています。

eol ・・・指定した値から始まる行をとばす

batファイルに「eol=a」のオプションを追記して、保存後実行して見て下さい。

@echo off
for /f "tokens=1,3 delims=. eol=a" %%i in (text1.txt) do echo %%i %%j
pause

「.」を区切り文字として、text1.txtファイルの1と3番目の文字を取得する、かつ「a」から始まる行をとばすbatファイルです。

1 2 3 4
a1 b2 3b 4b
111 222 333 444
12.34.56.78

「a」から始まる2行目が消えています。その他は先程の結果と同じです。

skip・・・ 頭から指定した数行を無視する

batファイルに青背景のオプションを追記して、保存後実行して見て下さい。

@echo off
for /f "tokens=1,3 delims=. eol=a skip=2" %%i in (text1.txt) do echo %%i %%j
pause

「.」を区切り文字として、text1.txtファイルの1と3番目の文字を取得する、かつ「a」から始まる行をとばす、かつ1,2行目をとばすbatファイルです。

1 2 3 4
a1 b2 3b 4b
111 222 333 444
12.34.56.78

先頭の2行が消えています。後の結果は同じです。

対象をコマンドの結果にする

最後はコマンドの結果を対象として、値を取得しましょう。構文は下記です。

for %%i in (`コマンド`) do コマンド

batファイルに下記を記入して、保存後実行して見て下さい。

@echo off
dir
for /f "tokens=1,4 usebackq" %%i in (`dir`) do echo %%i %%j
pause

まずdirコマンドで表示しています。その後、dirの結果の1,4番目を取得して見ました。(区切りはデフォルトのスペース)

上はdirコマンドの結果です。下はコマンド結果の1と4番目の「日時」と「ファイル名」を取得出来ています。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
目次
閉じる