【図解あり】一括でファイル名の一部置き換え

この記事は、ファイル名から一部の言葉を一括で削除する方法を紹介した記事の、
削除ではなく置き換える場合の方法を紹介しています。

こんな方におすすめ

  • 削除じゃなくて置き換えがしたいけど、方法がわからない方
  • ChatGPTを使ったけど、機能しなかった方

例えばファイルを保存するとき、「(日付)_(ファイル名)」のようにファイルを保存しておくことがあります。
このとき、最初は年度をつけていなかったけれど、後から追加したくなることがあったりします。

他にもハイフンを全角の「_」にしていたけれど、半角の「_」に直したいといったこともあります。

そういったとき、ファイル数が多いと削除して書き直すのは手間がかかり、ミスも発生しやすいです
そういった方のために、今回はファイルの特定の文字を一括で置き換える方法をお伝えします!

それではどうぞ!

コード紹介

文字を一括で置き換えるコードは下記の通りです

@echo off
setlocal enabledelayedexpansion

rem フォルダのパスを取得
set "targetDirectory=%cd%"

rem 対象ファイルの拡張子を入力
set /p "fileExtension=対象ファイルの拡張子を入力後、エンターキーを入力してください(例: xlsx,docx,txt,csv ...): "

rem 変更前の文字列
set /p "oldString=ファイル名の中で、削除したい文字を入力後、エンターキーを入力してください:"

rem 変更後の文字列
set /p "newString=新たに追加したい文字を入力後、エンターキーを入力してください:"

for %%f in ("%targetDirectory%\*%fileExtension%") do (
    set "filename=%%~nf"
    set "newFilename=!filename:%oldString%=%newString%!"
    if not "!filename!"=="!newFilename!" (
        ren "%%f" "!newFilename!.%fileExtension%"
    )
)

この上のコードをコピーして、テキストに張り付けてバッチファイルにしてください。
それだけでさっきのファイルが完成します。

変更点

元のファイルとの違いは
「set /p “newString=新たに追加したい文字を入力後、エンターキーを入力してください:”」
の部分です。

ポイントは
①set /pで変数に文字を入れる
②!filename:%oldString%=%newString%!で文字を置き換える
です!

ポイント①:set /pで変数に文字を入れる

setコマンドは、環境変数に関係するコマンドです。
詳細はこちらのサイトをご覧ください。

今回はこちらの内、
「/p」を使用します。

これはユーザーの入力した文字を変数に入れるコマンドで、これを使用して置き換え後の文字を読み込んでいます。

先ほどの
「set /p “newString=新たに追加したい文字を入力後、エンターキーを入力してください:”」
がそれにあたる部分です。

ちなみに、削除するだけのファイルでは、
・ 「/p」を使用せず、既定の文字を追加する動作をしている。
・ このとき、「newString」に空白を入力
となっています。

ポイント②:!filename:%oldString%=%newString%!で文字を置き換える

これは置換の構文です。構造は
!「変数名」:「置換対象の文字列」=「置換後の文字列」!
となっています。

今回のコードでは、「filename」の「oldString」を「newString」に置き換えるように指示しています。
これで文字の置き換えが出来ていたというわけです。

もともとの削除する仕様のバッチファイルでは「newString」が空白になっていて、
空白に置き換えることで削除をしていました。

ファイルの使い方

基本的には特定の文字を削除するバッチファイルと同じ使い方です。
こちらの記事を参照ください!

以上、最後まで読んでいただき誠にありがとうございました。

タイトルとURLをコピーしました