.bat(バッチファイル)でファイル名先頭に連番を付加する


ソースコード

numbering.bat
@echo off
@setlocal enabledelayedexpansion

set num=0

for %%i in (*) do (
  rem ソースファイル自身を対象に取らないために
  if not %%i==%~nx0 (
    ren %%i !num!_%%~nxi
    set /a num+=1
  )
)

使い方

  • 連番を振りたいファイル群のあるフォルダにソースファイルを置く

  • ソースファイルを実行する

for文内での変数の遅延展開について

ren %%i !num!_%%~nxi!%に変えるとどうなるか

時系列

  1. numの値が0に設定される
  2. `for'のループが3つ全て展開される
  3. ren %%i %num%_%%~nxiren %%i 0_%%~nxiとなる
  4. 展開されたforのループが1つ実行される
  5. numが1増加する

numの値が更新される前に、全てのループの展開が終了しているのがミソで、これによってループが全てnumの初期値0によって実行されることになってしまう。だから全ファイルの先頭が0になる。