簡単なバッチファイルを書く 文字置き換え

おはようございます。すぎやまです。

この記事では、バッチファイルを使用して文字の置き換えを実施する方法を紹介します。

まず、結論を記載します。

バッチファイルで文字置き換え変更

  • 文字の置き換えは「set」コマンドを使用
  • ![元の文字列]:[置換対象の文字]=[置換後の文字]!で文字置き換え可能
  • これを応用し、ファイル名の一括変更が可能

下記、詳細を説明します。

使用するコマンド

前述の通り、「set」コマンドを使用します。

文法機能
set [変数名] = [内容][変数名]を[内容]にする
set [変数名] = ![元の文字列]:[置換対象の文字]=[置換後の文字]![元の文字列]の[置換対象の文字]を[置換後の文字]に置き換えて[変数名]にする

詳細はこちらのサイトをご覧ください。

文字の置き換え

先述の
set [変数名] = ![元の文字列]:[置換対象の文字]=[置換後の文字]!
を試してみます。

例として、「old」を「new」と書き換えるコードを作ってみます。
テスト用コードは下記で、実行すると文字の置き換えが確認できます。

@echo off
setlocal enabledelayedexpansion
set word=old string
set oldString=old
set newString=new

echo Before: %word%
set word=!word:%oldString%=%newString%!
echo After: !word!
endlocal
pause

なお、日本語の文字列を変更しようとするとエラーが起きるので注意ください。

ファイル名の置き換え

このコマンドを使用すれば、一部のファイル名であれば一括で置換をすることが出来ます。

@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%"
    )
)

使用方法はこちらの記事をご覧ください。

その他のバッチファイル

今回は文字の一括置き換えに焦点を当てましたが、
バッチファイルを使用するとその他の処理も行うことができます。

バッチファイルに可能なことを大まかに知りたい方はこちらの記事を、
実際に使用できるコードを知りたい方はこちらの記事を参照ください。

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

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