バッチファイルで同じ処理を繰り返すには 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管理人



コメント