【Windows】バッチ(bat)でファイル名の一部を一括で置換する

Windwos バッチ(bat)で、フォルダ内にあるすべてのファイルについて、ファイル名の一部を一括で置換する方法をご紹介します。
サンプルコード形式で、コピペダブルクリックですぐ使えます。

サンプルコードは置換を想定していますが、置き換え用の変数を空白にすれば一括削除にもなります。

目次

想定のフォルダ構成

想定しているフォルダ構成は次の通りです。
sampleフォルダに処理対象を入れておきます。
<バッチファイル名>.batファイルにサンプルコードを書き込み、ダブルクリックで処理を実行します。
これからご紹介するサンプルコードを、batch_file.batにコピペ・実行してください。
バッチファイル名は変更して貰ってOKです。

batch_file.bat
sample
├── text_a.txt
├── text_b.txt
├── text_c.txt
├── jpg_a.jpg
├── jpg_b.jpg
└── jpg_c.jpg

テストする場合は、念のためバックアップをお忘れなきよう。

それではサンプルコードを見ていきましょう!

ファイル名の一部を一括で置換

@echo off
setlocal enabledelayedexpansion

set "folder_path=.\sample"
set "search_text=text"
set "replace_text=test"

if exist "%folder_path%" (
    for %%f in ("%folder_path%\*.*") do (
        set "file_path=%%~f"
        set "filename=%%~nxf"
        set "new_filename=!filename:%search_text%=%replace_text%!"
        ren "!file_path!" "!new_filename!"
    )
)

endlocal

set "search_text=text"は置き換えたい対象の文字列を指定します。
この例では「text」を対象にしています。
例えば、ファイル名に「blog」を含めたものを対象にしたい場合は、
set "search_text=blog"のように変更ください。

set "replace_text=test"は置換後の文字列を指定しています。
例は「test」に置換します。
同様に置き換え後に指定したい文字列に変更ください。

元のファイル名
置換後

ファイル名の一部を一括で削除

@echo off
setlocal enabledelayedexpansion

set "folder_path=.\sample"
set "search_text=text"
set "replace_text="

if exist "%folder_path%" (
    for %%f in ("%folder_path%\*.*") do (
        set "file_path=%%~f"
        set "filename=%%~nxf"
        set "new_filename=!filename:%search_text%=%replace_text%!"
        ren "!file_path!" "!new_filename!"
    )
)

endlocal

今度は削除バージョンです。
変わったのはset "replace_text="です。
置換後の文字列を空白にすることで削除することができます。

実行結果がこちらです。

元のファイル名
置換後

これで、変数を変えて貰えば、一括置換、一括削除を思うようにやって頂けるはずです。

今回は以上となります。
本記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次