読者です 読者をやめる 読者になる 読者になる

複数のファイルの名前を一気に変更するバッチスクリプト。

ファイル名が似ている複数のファイルの名前を変更したいが、
ファイルの数が多くて面倒なことがありますね。

そういう時はツールをダウンロードして解決したり、
自分の得意なプログラミング言語
プログラムを作って解決したりします。

解決する方法は色々あると思いますが、
Windowsの場合、バッチスクリプトを使えば、
簡単です。

以下のバッチスクリプトを、拡張子をbat(又はcmd)に
して保存し、実行すれば、簡単に複数のファイルの名前を
一気に変更することができます。

但し、変数の設定を先に行わなければなりません。
下記スクリプトから、pattern, filename, ext, targetを変更する必要があります。

以下のスクリプトの場合、
sample 01 document.txt
sample 02 document.txt
sample 03 document.txt
のようなファイルを
test 01.txt
test 02.txt
test 03.txt
のように変更してくれます。

詳細はスクリプト内のコメント(rem部分)を参照して下さい。
スクリプトの修正が必要ですが、色々な場面で使えると思います。

@echo off

rem utf-8を使いたい場合、コメントを解除して下さい。
rem chcp 65001

rem 変数の遅延評価(!を使う部分)を可能にします。
setlocal ENABLEDELAYEDEXPANSION

rem 変更対象のファイルを抽出するためのパターンです。ワイルドカード形式で指定します。
set pattern="sample ?? document.*"

for %%i in (%pattern%) do (    
    set source=%%i

    rem 変更後のファイル名に使う部分を変更前のファイル名から抽出する変数です。
    rem ~7,2はファイル名の7番目から2文字を切り取るとの意味です。
    rem 例えば、sample 01 document.txtの場合、01になります。
    set filename=!source:~7,2!

    rem 変更後のファイルの拡張子に使う部分を変更前のファイル名から抽出する変数です。
    rem ~1919番目の文字から最後の文字までを切り取るとの意味です。
    rem 例えば、sample 01 document.txtの場合、txtになります。
    set ext=!source:~19!

    rem 変更後のファイル名を指定した変数です。
    rem 例えば、sample 01 document.txtの場合、test 01.txtになります。
    set target=test !filename!.!ext!

    echo !source! is being renamed to !target!...
    rename "!source!" "!target!"
   
    if exist !target! (
        echo [!source!] was renamed to [!target!].
    ) else (
        echo [!source!] could not be renamed to [!target!].
    )
)
endlocal