search
LoginSignup
21

More than 1 year has passed since last update.

batファイルでファイル名を一括リネームしたい

多数のファイルの名前の共通部分を一括でリネームしたい。
そんな時に前職で使っていたバッチファイルを思い出しながら、自分用にもう一度作ってみました。

ファイル名の共通部分を一括でリネームするバッチ

一括リネームしたいファイルたちがいるフォルダに、下記のバッチファイルを置き、
置換前・置換後の文字列を設定します。

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にリネームされます。

実行前
1.png
実行後
2.png

拡張子の一括変更も可能です。

file_rename.bat
rem -------置換前・置換後の文字列を設定-------
set TARGET=.txt
set REPLACE_WITH=.csv
rem ------------------------------------------

実行前
3.png
実行後
4.png

解説

どうやって文字を置換しているか

setコマンドの、変数の置換機能を使って置き換えしています。

set [変数名]=%[変数名]:[置換前文字列]=[置換後文字列]%

このバッチでは置換前・置換後文字列を変数に格納しているので、
変数を展開した式をsetコマンドに渡す必要があるため、

 call set [変数名]=%%[変数名]:%[置換前文字列の変数]%=%[置換後文字列の変数]%%%

という形式で記述しています。

どうやってファイル名を変更しているか

renameコマンドを使っています。rename は ren と略すことができます。

ren [現在のファイル名.拡張子] [新しいファイル名.拡張子]

元のファイルを残したい場合は、
「ren」部分を「copy」に変更すると、元のファイルを残しつつ、
ファイル名を置換した新しいファイルを作ることができます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
21