フォルダ内のファイルに連番をつけたい(Windows)

投稿者: | 2019年9月15日

ファイル整理で連番をつけいたとき

(うしろのほうで、連番ではなくて今のファイル名に文字列を追加したい例も記述しています。)

写真やテキストなどをひとつのフォルダに集めておき、連番をつける方法です。
ごちゃごちゃしたファイル名のものがあり、文字列+連番.txtとか、文字列+連番.jpgとする場合に使えます。

遅延環境変数 ( setlocal ENABLEDELAYEDEXPANSION )を使うのでバッチにしないとできませんでした。

以下の例では、ファイル名を、 fjsw_連番.jpg としたい場合です。
このブログで藤沢のネタに使うから fjsw_ をつけて連番をつけてみようと思いまし。
カウントは10から行っています。1からでもいいのですが、ファイルが多くなった場合、fjsw_1.jpg と fjsw_11.jpg という風に数字部分の桁が合わないのもなんだなと思い、10からにしています。100個以上ある場合、100からにするとすっきりするかもしれません。


setlocal ENABLEDELAYEDEXPANSION

set /a cnt=10
for %%i = in ( *.jpg ) do (
rename %%i fjsw_!cnt!.jpg
set /a cnt=cnt+1
)

pause

pause は癖のようなもので、うまくいかなかったときにバッチがどこでどうなっているのか見える(止まる)のでつけています。
バッチファイルをダブルクリックで実行だと失敗してもコマンドプロンプトが消えてしまってエラー箇所が見えません。

やってみた

まずは元の状態。

バッチ実行

結果

小ネタとして便利です。

特定の文字列を追加したい場合

元のファイル名を残して前や後に文字列を追加したい場合は、forfiles を使います。

例は、 fjsw_(連番).jpg というファイルがあるフォルダにある jpg ファイルのファイル名の頭に、blog_ をつけるものでやってみます。


forfiles /M fjsw_*.jpg /C “cmd /c rename @file blog_@file”

うまいこといきました。

頭ではなくて、ファイル名と拡張子の間に追加することもできます。


forfiles /M fjsw_*.jpg /C “cmd /c rename @file @fname_img.jpg”

(一度、ファイル名を戻しておきます。)

実行すると以下のようになります。