FOR(繰り返し処理)

にメンテナンス済み

バッチファイルを作成していると、「複数のファイルに対して同じ処理を実行したい」「一定回数だけ処理を繰り返したい」といった場面に遭遇することがあります。

このような繰り返し処理を実現するのが FOR コマンドです。

この記事では、FOR コマンドの基本から各オプションの使い方まで、具体的なサンプルコードを交えて詳しく解説します。

FOR コマンドの基本構文

FOR コマンドの基本的な構文は以下の通りです。

構文
FOR %%変数 IN (セット) DO コマンド
要素説明
%%変数繰り返しごとに値が格納される変数(1 文字、a〜z または A〜Z)
(セット)処理対象となる値のリスト(スペースまたはカンマで区切る)
コマンド各繰り返しで実行するコマンド
チェック

コマンドプロンプトで直接実行する場合は %変数(%が1つ)、バッチファイル内では %%変数(%が2つ)を使用します。

基本的な使用例

複数の値を順番に処理する簡単な例を見てみましょう。

sample.cmd
@echo off
setlocal

FOR %%i IN (りんご みかん ぶどう) DO (
    echo %%i が選択されました
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>sample.cmd
りんご が選択されました
みかん が選択されました
ぶどう が選択されました
C:\users\user>

セット内の値が順に変数 %%i に格納され、DO 以降のコマンドが実行されます。

ファイルを対象に繰り返す

ワイルドカードを使用すると、条件に一致するファイルを対象に繰り返し処理ができます。

list_txt.cmd
@echo off
setlocal

FOR %%f IN (*.txt) DO (
    echo ファイル: %%f
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>list_txt.cmd
ファイル: document.txt
ファイル: memo.txt
ファイル: readme.txt
C:\users\user>

カレントディレクトリ内の .txt ファイルがすべて処理されます。

/L オプション:数値範囲で繰り返す

/L オプションを使用すると、数値を変化させながら繰り返し処理を実行できます。

構文
FOR /L %%変数 IN (開始値, 増分, 終了値) DO コマンド
パラメータ説明
開始値ループの開始となる数値
増分各繰り返しで加算される値
終了値ループの終了となる数値

1 から 5 まで繰り返す

count.cmd
@echo off
setlocal

FOR /L %%n IN (1, 1, 5) DO (
    echo カウント: %%n
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>count.cmd
カウント: 1
カウント: 2
カウント: 3
カウント: 4
カウント: 5
C:\users\user>

10 から 2 刻みでカウントダウン

増分に負の値を指定すると、カウントダウンもできます。

countdown.cmd
@echo off
setlocal

FOR /L %%n IN (10, -2, 0) DO (
    echo %%n
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>countdown.cmd
10
8
6
4
2
0
C:\users\user>

/D オプション:ディレクトリを対象に繰り返す

/D オプションを使用すると、ファイルではなくディレクトリのみを対象に繰り返し処理を実行できます。

構文
FOR /D %%変数 IN (パターン) DO コマンド

使用例

list_dirs.cmd
@echo off
setlocal

echo カレントディレクトリ内のフォルダ一覧:
FOR /D %%d IN (*) DO (
    echo   [DIR] %%d
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>list_dirs.cmd
カレントディレクトリ内のフォルダ一覧:
[DIR] Documents
[DIR] Downloads
[DIR] Pictures
C:\users\user>

/R オプション:サブディレクトリを含めて再帰的に繰り返す

/R オプションを使用すると、指定したディレクトリ以下のすべてのサブディレクトリを含めて繰り返し処理を実行できます。

構文
FOR /R [ルートパス] %%変数 IN (パターン) DO コマンド

ルートパスを省略した場合は、カレントディレクトリが対象になります。

使用例:すべての.txt ファイルを検索

find_all_txt.cmd
@echo off
setlocal

echo すべての.txtファイルを検索中...
FOR /R %%f IN (*.txt) DO (
    echo 発見: %%f
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>find_all_txt.cmd
すべての.txtファイルを検索中…
発見: C:\Users\user\Documents\readme.txt
発見: C:\Users\user\Documents\memo\note.txt
発見: C:\Users\user\Documents\backup\old.txt
C:\users\user>
チェック

大量のファイルがあるディレクトリで /R オプションを使用すると、処理に時間がかかる場合があります。

/F オプション:ファイルの内容を読み込んで繰り返す

/F オプションは最も強力なオプションで、テキストファイルの各行を読み込んで処理したり、コマンドの出力結果を処理したりできます。

構文
FOR /F ["オプション"] %%変数 IN (入力) DO コマンド

テキストファイルの各行を処理

read_file.cmd
@echo off
setlocal

echo ファイルの内容を1行ずつ表示:
FOR /F %%line IN (data.txt) DO (
    echo %%line
)

endlocal

オプションの指定

/F オプションでは、様々なオプションを指定できます。

オプション説明
delims=文字区切り文字を指定(デフォルトはスペースとタブ)
tokens=番号取得するトークンの位置を指定
skip=行数スキップする行数を指定
eol=文字行末コメントの開始文字を指定
usebackqバッククォートの解釈を変更

CSV ファイルを処理する例

read_csv.cmd
@echo off
setlocal

echo 名前,年齢,都市 のCSVを処理:
FOR /F "tokens=1,2,3 delims=," %%a IN (users.csv) DO (
    echo 名前: %%a / 年齢: %%b / 都市: %%c
)

endlocal

users.csv の内容が以下の場合:

users.csv
田中,25,東京
佐藤,30,大阪
鈴木,28,名古屋
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>read_csv.cmd
名前,年齢,都市 のCSVを処理:
名前: 田中 / 年齢: 25 / 都市: 東京
名前: 佐藤 / 年齢: 30 / 都市: 大阪
名前: 鈴木 / 年齢: 28 / 都市: 名古屋
C:\users\user>

コマンドの出力結果を処理

バッククォート(`)でコマンドを囲むと、そのコマンドの出力結果を処理できます。

process_output.cmd
@echo off
setlocal

echo 現在のディレクトリ内のファイル数をカウント:
set count=0
FOR /F %%f IN ('dir /b /a-d') DO (
    set /a count+=1
)
echo ファイル数: %count%

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2025 Ribbit App Development All rights reserved.
 
C:\users\user>process_output.cmd
現在のディレクトリ内のファイル数をカウント:
ファイル数: 5
C:\users\user>

変数の拡張属性

FOR コマンドの変数には、ファイルに関する様々な情報を取得するための拡張属性が用意されています。

拡張属性説明
%%~f完全修飾パス名(フルパス)
%%~dドライブ名のみ
%%~pパス名のみ(ドライブ名を除く)
%%~nファイル名のみ(拡張子を除く)
%%~x拡張子のみ
%%~zファイルサイズ
%%~tファイルの日時

使用例

file_info.cmd
@echo off
setlocal

FOR %%f IN (*.txt) DO (
    echo ファイル: %%f
    echo   フルパス: %%~ff
    echo   ファイル名: %%~nf
    echo   拡張子: %%~xf
    echo   サイズ: %%~zf バイト
    echo.
)

endlocal

実践的なサンプルコード

複数ファイルの一括リネーム

bulk_rename.cmd
@echo off
setlocal enabledelayedexpansion

set prefix=backup_
set count=1

FOR %%f IN (*.txt) DO (
    set newname=%prefix%!count!%%~xf
    echo %%f を !newname! にリネーム
    ren "%%f" "!newname!"
    set /a count+=1
)

echo 完了しました
endlocal

ログファイルの古いものを削除

cleanup_logs.cmd
@echo off
setlocal

echo 7日以上前のログファイルを削除します...
FOR /F "delims=" %%f IN ('forfiles /p "C:\logs" /s /m *.log /d -7 /c "cmd /c echo @path" 2^>nul') DO (
    echo 削除: %%f
    del "%%f"
)

echo 完了しました
endlocal

練習問題

練習問題1

バッチファイル内で 1、2、3 を順番に表示する FOR 文として正しいものはどれですか?

回答がサーバーに送信されることはありません
練習問題2

数値の範囲を指定して繰り返し処理を行うためのオプションはどれですか?

回答がサーバーに送信されることはありません
練習問題3

/L オプションで 1 から 10 まで 1 ずつ増加させる正しい記述はどれですか?

回答がサーバーに送信されることはありません

まとめ

FOR コマンドは、バッチファイルでの繰り返し処理を実現する強力なコマンドです。

主なポイント:

  • 基本構文FOR %%変数 IN (セット) DO コマンド
  • /L オプション:数値範囲での繰り返し(開始値, 増分, 終了値)
  • /D オプション:ディレクトリのみを対象に繰り返し
  • /R オプション:サブディレクトリを含めた再帰的な繰り返し
  • /F オプション:ファイル内容やコマンド出力の処理

これらのオプションを使い分けることで、複雑な繰り返し処理も効率的に記述できます。

#コマンドプロンプト #バッチファイル #FOR #ループ #繰り返し処理