多数のファイルの名前の共通部分を一括でリネームしたい。
そんな時に前職で使っていたバッチファイルを思い出しながら、自分用にもう一度作ってみました。
ファイル名の共通部分を一括でリネームするバッチ
一括リネームしたいファイルたちがいるフォルダに、下記のバッチファイルを置き、
置換前・置換後の文字列を設定します。
file_rename.bat
@echo off
rem ------- 置換前・置換後の文字列を設定 -------
set TARGET=old
set REPLACE_WITH=new
rem -----------------------------------------
for %%F in ( * ) do call :sub "%%F"
exit /b
:sub
set FILE_NAME=%1
call set FILE_NAME=%%FILE_NAME:%TARGET%=%REPLACE_WITH%%%
ren %1 %FILE_NAME%
goto :EOF
実行すると、フォルダ内のファイルのold部分がnewにリネームされます。
拡張子の一括変更も可能です。
file_rename.bat
rem -------置換前・置換後の文字列を設定-------
set TARGET=.txt
set REPLACE_WITH=.csv
rem ------------------------------------------
解説
どうやって文字を置換しているか
setコマンドの、変数の置換機能を使って置き換えしています。
set [変数名]=%[変数名]:[置換前文字列]=[置換後文字列]%
このバッチでは置換前・置換後文字列を変数に格納しているので、
変数を展開した式をsetコマンドに渡す必要があるため、
call set [変数名]=%%[変数名]:%[置換前文字列の変数]%=%[置換後文字列の変数]%%%
という形式で記述しています。
どうやってファイル名を変更しているか
renameコマンドを使っています。rename は ren と略すことができます。
ren [現在のファイル名.拡張子] [新しいファイル名.拡張子]
元のファイルを残したい場合は、
「ren」部分を「copy」に変更すると、元のファイルを残しつつ、
ファイル名を置換した新しいファイルを作ることができます。