Programming Field

大量ファイルを連番など規則的にリネームする方法 - Windowsコマンド実用例

デジカメ・スマホ画像やスキャンPDFなど、同一フォルダー内の多数のファイル名を連番で一括変換したい場面で活用できるバッチスクリプト例を紹介します。「日付+番号」の形式にしたり任意の接頭辞を付けたりするなど、規則性のあるパターンをもつ名前に変更可能です。

使用コマンド

  • For - ファイルに対して順番に処理を適用
  • Set - 変数の定義と計算(連番制御)を行うコマンド
  • Rename (Ren) - ファイル名の変更
  • Setlocal - 「enabledelayedexpansion」を使って「!」文字の利用を有効化

バッチファイルの例

@echo off
setlocal enabledelayedexpansion
set COUNT=1
set PREFIX=20250429_

for %%F in (*.jpg) do (
  set "NUM=000!COUNT!"
  set "NUM=!NUM:~-4!"
  ren "%%F" "!PREFIX!!NUM!.jpg"
  set /a COUNT+=1
)

上記の例では、ファイルを 20250429_0001.jpg20250429_0002.jpg のように変換します。

補足事項

  • 元のファイル名に規則性がある場合は %%~nF で名前部分、%%~xF で拡張子部分を取得することができます。
    • この情報を利用して、キーワードでの絞り込みや条件付き変換を行うことも可能です(応用例参照)。
    • %%~nF などの意味については「%」のページをご覧ください。
  • 桁数や接頭語(PREFIX)は必要に応じて変更してください。
  • 対象拡張子を *.jpg*.pdf*.txt に変更すれば他の形式にも対応できます。
  • 処理前に echo ren ... にするとコマンドを実行せず結果を出力することができるので、一度確認することをおすすめします。

応用例

  • 日付を接頭辞に使う場合:
    for %%F in (*.jpg) do (
      set "NUM=000!COUNT!"
      set "NUM=!NUM:~-4!"
      ren "%%F" "%date:~0,4%%date:~5,2%%date:~8,2%!NUM!.jpg"
    )
  • ファイル名に特定キーワードを含む場合だけ処理(下記例では report が該当します):
    for %%F in (*.txt) do (
      echo %%~nF | findstr /i "report" >nul && (
        ren "%%F" "report_%%~nF%%~xF"
      )
    )
  • 拡張子ごとに連番を分けて処理:
    setlocal enabledelayedexpansion
    set JPGCOUNT=1
    set PDFCOUNT=1
    
    for %%F in (*.*) do (
      if /i "%%~xF"==".jpg" (
        set "NUM=000!JPGCOUNT!"
        set "NUM=!NUM:~-4!"
        ren "%%F" "img_!NUM!%%~xF"
        set /a JPGCOUNT+=1
      )
      if /i "%%~xF"==".pdf" (
        set "NUM=000!PDFCOUNT!"
        set "NUM=!NUM:~-4!"
        ren "%%F" "doc_!NUM!%%~xF"
        set /a PDFCOUNT+=1
      )
    )

    この方法は、1つのバッチファイルで複数種類のファイル(例: jpgとpdf)を同時に扱えるという点で便利ですが、処理の分岐が複雑化しやすく、メンテナンス性に注意が必要です。拡張子ごとに完全に独立した処理を行いたい場合は、別々のループまたは別のバッチファイルに分ける方法も検討してください。

さらなる応用

  • ファイル名の昇順(アルファベット順)でリネーム:
    set COUNT=1
    for /f %%F in ('dir /b /on *.jpg') do (
      set "NUM=000!COUNT!"
      set "NUM=!NUM:~-4!"
      ren "%%F" "ordered_!NUM!.jpg"
      set /a COUNT+=1
    )

    dir /b /on」でアルファベット順の名前のみを一覧で取得し、それらに対してコマンドを実行する形になっています。

  • 更新日時を名前に使用:
    for %%F in (*.jpg) do (
      for /f "tokens=1-3 delims=/ " %%a in ("%%~tF") do (
        set "DATE=%%a%%b%%c"
        ren "%%F" "%%~nF_!DATE!%%~xF"
      )
    )

    %%~tF で更新日時(例:2025/04/29)を取得できるため、それを名前に追加します。ロケールによって日付の区切り文字や順序が異なる場合があるため、必要に応じて調整してください。

関連項目