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="
です。
置換後の文字列を空白にすることで削除することができます。
実行結果がこちらです。
元のファイル名
置換後
これで、変数を変えて貰えば、一括置換、一括削除を思うようにやって頂けるはずです。
今回は以上となります。
本記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!