Windowsバッチファイル

バッチファイルのループ処理【for文でファイル・数値・フォルダを繰り返し処理】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルで同じ処理を繰り返すには for 文を使います。ファイル・数値・テキスト・CSVなど用途によって4つの書き方があります。それぞれの構文の意味・オプションの使い方を実例とともに解説します。

forコマンドの4つのパターン

パターン書き方用途
リストループfor %%i in (値1 値2 …)固定のリストや複数ファイルを順番に処理
数値ループfor /l %%i in (開始,増分,終了)指定した範囲で数値カウンターを回す
テキスト処理for /f %%i in (ファイルまたはコマンド)テキストファイルやコマンド出力を1行ずつ処理
再帰ファイル検索for /r %%i in (パターン)サブフォルダも含めてファイルを一括処理

重要:バッチファイル内では %%i(パーセント2つ)と書きます。コマンドプロンプトで直接実行するときは %i(パーセント1つ)ですが、バッチファイルでは必ず %% にします。

リストループ:固定の値を順番に処理する

@echo off

rem 固定リストを順番に処理
for %%i in (Apple Banana Cherry) do (
    echo %%i
)

rem ワイルドカードでフォルダ内のファイルを処理
for %%f in (C:\work\*.txt) do (
    echo ファイル名: %%~nxf
    echo フルパス:   %%f
)

数値ループ(for /l):カウンターで繰り返す

for /l %%i in (開始, 増分, 終了) の /l は「Loop(ループ)」の意味です。開始値から終了値まで、増分ずつ変化させながら繰り返します。

@echo off

rem 1から5まで
for /l %%i in (1,1,5) do echo %%i

rem 0から100まで10刻み
for /l %%i in (0,10,100) do echo %%i

rem 5から1にカウントダウン(増分をマイナスにする)
for /l %%i in (5,-1,1) do echo %%i

rem ループ内で処理を行う実用例
for /l %%i in (1,1,5) do (
    echo 処理 %%i 件目を実行中...
    rem ここに実際の処理を書く
)

テキスト処理(for /f):ファイルやコマンド出力を処理する

for /f の /f は「File(ファイル)」の意味です。テキストファイルを1行ずつ読み込んだり、コマンドの出力結果を処理するときに使います。

@echo off

rem コマンドの出力を処理('コマンド'をシングルクォートで囲む)
for /f "tokens=*" %%a in ('dir /b C:\work\*.txt') do (
    echo ファイル: %%a
)

rem テキストファイルを1行ずつ読み込む
rem delims= で区切り文字をなし(行全体を1つの値として扱う)
for /f "delims=" %%a in (C:\work\list.txt) do (
    echo %%a
)

rem CSVを読み込んでカンマで区切る(tokens=1,2,3 でカラムを指定)
for /f "tokens=1,2,3 delims=," %%a in (data.csv) do (
    echo 名前:%%a  年齢:%%b  都市:%%c
)

rem usebackq:ファイルパスにスペースがあるときはダブルクォートで囲んでusebackqを使う
for /f "usebackq delims=" %%a in ("C:\My Work\list.txt") do (
    echo %%a
)

tokens と delims の説明:

  • tokens=1,2,3:区切り文字で分割したとき1番目・2番目・3番目の値を取り出す(%%a・%%b・%%c に対応)
  • delims=,:区切り文字をカンマに設定(デフォルトはスペースとタブ)
  • delims=:区切り文字なし(行全体を1つの値として扱う)

再帰ファイル検索(for /r):サブフォルダも含めて処理する

for /r の /r は「Recursive(再帰)」の意味です。指定したフォルダとそのすべてのサブフォルダからファイルを検索して処理します。

@echo off

rem C:\work以下のすべての.txtファイルを処理
for /r C:\work %%f in (*.txt) do (
    echo %%f
)

rem ファイル名の各パーツを取り出す
for /r C:\work %%f in (*.log) do (
    echo ファイル名: %%~nf    ← 拡張子なしの名前
    echo 拡張子:    %%~xf    ← .log
    echo フォルダ:  %%~dpf   ← ドライブ+パス
    echo サイズ:    %%~zf bytes
)

forで使えるパス修飾子

修飾子意味例(%%fがC:\work\log.txt の場合)
%%fフルパスC:\work\log.txt
%%~nfファイル名(拡張子なし)log
%%~xf拡張子のみ.txt
%%~nxfファイル名+拡張子log.txt
%%~dpfドライブ文字+フォルダパスC:\work\
%%~zfファイルサイズ(バイト)1024
%%~tf最終更新日時2026/04/24 09:00

まとめ

  • for /l は数値カウンター(開始,増分,終了)で指定した回数ループする
  • for /r はサブフォルダも含めてファイルを再帰的に処理する
  • for /f はテキストファイルやコマンド出力を1行ずつ処理できる最強パターン
  • delims= で区切り文字、tokens= で取り出す列番号を指定する
  • %%~nf・%%~xf などの修飾子でファイル名やパスの各部分を取り出せる

for /f はバッチファイルの中で最も強力なコマンドのひとつです。コマンドの出力結果を変数に取り込んで処理するとき(例:ipconfig の出力からIPアドレスだけ抜き出すなど)に非常に役立ちます。tokens と delims の使い方を覚えると応用の幅が一気に広がります。

hobbyshift管理人

コメント

タイトルとURLをコピーしました