##ソースコード
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
で!
を%
に変えるとどうなるか
###時系列
-
num
の値が0に設定される - `for'のループが3つ全て展開される
-
ren %%i %num%_%%~nxi
はren %%i 0_%%~nxi
となる - 展開された
for
のループが1つ実行される -
num
が1増加する
num
の値が更新される前に、全てのループの展開が終了しているのがミソで、これによってループが全てnum
の初期値0によって実行されることになってしまう。だから全ファイルの先頭が0になる。