変換パターンリストを元に全ファイル名を一括変換するプログラム(ツール)

  • URLをコピーしました!

※本ページにはプロモーションが含まれています。

無料ツールなどでは正規表現も含めて1パターンでしかファイル名を変換できません。そこで複数の変換条件で一気にリネームできる便利なプログラムを開発しました

私のテストでは、CPUがCore i5 2.50GHzで、HDD(外付けUSB接続)内の14,218ファイルを291個の条件で変換するのにたった75秒で処理するという予想以上の高速処理に成功しました
(※もちろん処理速度はPCスペックや条件の複雑さなどで変わりますが)

実際に PowerShell 7.0 で動作するシェルスクリプトで開発したコードを公開しています。VSCode にコピペしてファイル名を「.ps1」とすれば動くので、使いたい人は試してみてください。
(※スクリプトの実行権限も変える必要があるので目次から参照)

後でGUIを付けて販売するときはコードを非公開にするかもしれないので、興味のある人はお早めにどうぞ。

PowerShell なのでWindows用スクリプトになります。

AIのプロンプトからスクリプトファイル作成、実行までが10分、さらに PowerShell や変換リストの動作確認に20分くらいかかりました。

合計30分くらいの簡単な作業でした。AIのおかげで便利な世の中になりました。

ところが、初回バージョンは何度か使ってみるとイマイチな出来だと分かりました。せっかくなので作り直し、3バージョン目でやっと実用に耐えうるレベルのスクリプトが出来上がりました。

そのままではさすがに使えず、大量のファイルを処理すると動作しなかったり、エラーが出たりしたので、いろいろ手を加えないといけませんでした。

AIを信用してスクリプトを実行していると、バージョン2では勝手にファイル内容を書き換えてしまうというひどい作りで、ファイルがいつくか壊れてしまいました。

AIのコードはちゃんと確認して使わないと危ないです。

おかげで私のプログラミング技術というか、AIプロンプト技術は上がりました。

AIプロンプターとしては、やはり必要な条件を完璧に列挙する詳細設計が重要だと痛感したスクリプト作成となりました。

AIが普及した近未来では、従来の業務システム系エンジニアのカテゴリーでいうPGが減ってSEが増えていくことになるでしょう。

目次(読みたいところから読めます)

どんなときに使うの? どこがいいの?

ファイル名に使う単語を統一しておくと検索が早くなり、検索漏れもなくなるメリットがあります。

他の無料ツールではできない複数変換リストの一括変換が可能です。PowerShell なので処理も高速です。

実際にビジネスで使うなら、複数の取引先が、同じ言葉を異なる言葉で表現しているときに、言葉を統一するのに使えます。
例)打ち合わせ、会議、ミーティング、話し合い ⇒ 「会議」に統一

プライベートでは同じことを表すファイル名をいろいろな言葉で付けてしまったときに名前を統一するのに便利です。
例)Programing, Program, Pg, Project ⇒ Proj に統一

私のおすすめはファイル名に使う単語をタグのように統一することで、検索の利便性を高めるという使い方です。

ファイル検索といえば everything が高速で便利ですが、ファイル名を疑似タグ化しておけば、より的確な条件を指定した検索が可能になります

あらかじめファイル名に、py/c/java/sh などの言語名を含めて置き、さらに dat/dev/src/img などのカテゴリーを含めて置いたり、さらに目的など別のカテゴリーを含めておけば検索が便利になります。

そもそも PowerShell はどうなのか?

TwitterあらためXで教わりましたが、かなり使えます。タスクが自動化できるので、個人的な作業や業務の効率化にも使えます。

今回のリネームスクリプトも個人作業の自動化に活用した例です。

PowerShellのメリット
  1. Windowsに付属されている
  2. アーキテクチャがC#と共通なのでライブラリが流用できる
  3. 文法もほぼ同じなのでC#の勉強にもなる
  4. タスクの自動化やWindows構成管理がほぼ全部自動化できる
  5. ハード情報やレジストリも操作できる
  6. Microsoft 365が使え、メールやユーザー情報の取得、フィルター処理などを自動化できる
PowerShellのデメリット
  1. 悪用されることがありセキュリティリスクがある
  2. リスクがあるためスクリプトの実行ポリシーを適切に設定しないといけない

設計と実行環境

変換リストにある複数の条件で指定フォルダ配下のすべてのファイルをリネームするプログラムです。シェルスクリプトでコーディングしています。

Windows11 で PoweShell 7.0 を使い開発したので、PowerShell のコンソールを使います。

スクリプトファイル名に変換リスト名と対象フォルダを指定して実行します。実行方法は次のコードの最初のほうにあるコメントでも説明しているので参考にしてください。

実行時の書式は、スクリプトファイル名、変換リストのパス、対象フォルダ、を半角スペースで区切った書式になっています。

カレントフォルダだけでなく配下のフォルダのファイルもすべてリネームします。

変換リストはテキストファイルですが、カンマ区切りなのでCSVのようになっています。

1行の書式:[検索文字列]:[変換文字列]

この書式で条件を複数に指定することができます。

Power Shell 7.0 へのアップデート

古いPCだとインストールされていないので各自でアップデートしてください。

スクリプト実行権限の変更

Windows Power Shell 7.0 の実行権限はGet-ExecutionPolicyのコマンドレット(PowerShellのコマンド)で確認できます。

変更は、管理者権限でSet-ExecutionPolicy RemoteSignedを実行します。

RemoteSigned はローカルのスクリプトと外部の署名のあるスクリプトを実行可能にする設定です。

セキュリティ的に脆弱になるので無制限に実行できる設定などにはしないで制限付きの権限を設定します。

PoweShell 7.0 のコード

我ながら親切なコメント入りで初心者でも分かりやすいシェルスクリプトのコードです。FileRenamer.ps1 などのファイルを作りコピペすれば動きます。

ファイル名のリストを作り、1ファイルずつ変換リストの全条件で変換する処理を、100ファイルずつ行います。

<#
FileRenamer3.ps1 23/10/27 Author:teru

AIでファイルリネームスクリプトを作ろう第三弾
指定フォルダ配下のファイル名を変換リストを元に変換するPowerShellのスクリプト

実行サンプル(カレントフォルダから実行する例)
.\FileRenamer3.ps1 -searchFile .\replace_list.txt -targetFolder .\files
#>

param (
    [Parameter(Mandatory=$true)]
    [string]$searchFile,
    [Parameter(Mandatory=$true)]
    [string]$targetFolder
)

# 1度に処理するファイル数(正常に置換されているかどうかで調整)
$batchSize = 100

# 検索条件ファイルから検索条件を読み込む
$searchConditions = Get-Content $searchFile

# 対象フォルダ配下のファイルを取得する
$files = Get-ChildItem $targetFolder -Recurse

# ファイルをバッチ処理する
for ($i = 0; $i -lt $files.Count; $i += $batchSize) {
    $batch = $files[$i..($i + $batchSize - 1)]
    foreach ($file in $batch) {
        # ファイル名にシステム属性がある場合はスキップする
        if ($file.Attributes -band [System.IO.FileAttributes]::System) {
            Write-Host "Skip system file: $($file.FullName)"
            continue
        }
        # ファイル名をリネームする
        $newName = $file.Name
        foreach ($condition in $searchConditions) {
            $search = $condition.Split(':')[0]
            $replace = $condition.Split(':')[1]
            $newName = $newName.Replace($search, $replace)
        }
        if ($null -ne $file.DirectoryName) { 
            $newPath = Join-Path $file.DirectoryName $newName
            Rename-Item $file.FullName $newPath -Force -ErrorVariable RenameError
            if ($RenameError) {
                Write-Host "Rename $($file.FullName) to $($newPath)"
            }
        }
    }
}
Write-Host "File renaming completed."

改良案

このコードでは対象ファイルの種類が無制限なので、システムファイルだけ除外しています。安全性を増すために拡張子を限定する処理を追加する方法もあります。

基本的に限界値のエラーチェックがないので、各自の実行環境に合わせて設定しておけば、より堅牢なコードになります。

最終行の処理は完了メッセージをコンソールに出力しているだけですが、変換ファイルの総数や処理時間などをログファイルに出力するとユーザビリティが上がります。

アプリらしくなるのでGUIを作って実行ボタンから実行できるようにしてもいいでしょう。

アルファベットの大文字/小文字/キャピタライズ(語頭を大文字)、平仮名/カタカナ変換などの機能もあれば便利かもしれませんが、Flexible Renamer などで出来てしまいます。

わざわざ実装するよりは、他のもっとオリジナリティのある機能を考えて実装したほうが楽しみながらスキルアップできるのでおすすめです。

ちなみにキャピタライズ以外は変換リストを作れば、今回のコードでも実現可能です。

変換リスト

1行の書式は [検索文字列],[変換文字列] で、これを複数指定できます。

次が変換リスト(replace_list.txt)の例です。

打ち合わせ:会議
ミーティング:会議
話し合い:会議
Google: ggl srch engn
Yahoo: yah srch engn
Bing: bng srch engn
課長によろしく: (※半角スペース)

最初の3行は「会議」にファイル名を統一する変換リストの例です。

次の三行は検索エンジンの名前を省略して検索エンジン疑似タグに変換する例です。こうしておけば「srch engn」で検索エンジン関連ファイルすべて抽出できるようになります。

最後の「課長によろしく」は半角スペースに変換することで、実質的にデータを削除する条件になっています。

半角スペースではなく何も指定しないとエラーになるかもしれないので、そのときはコードを各自で修正してください。

いつか私がそういう処理が欲しくなったら、私が追加してここに公開するかもしれません。

使用上の注意

不具合や要望はご連絡ください

今回のスクリプトは私が何回も実行しているので、utf-8の文字や記号であれば問題なく動作するはずです。

それでも不具合が起きたり、要望があるときなどは、コメントやメールなどでご一報ください。

対応できるかはともかく、開発の参考にさせて頂きます。

Ctrl+Cで強制終了

Unixで実装されて以来、コンソールによく実装されているショートカットですが、PowerShell もCtrl+Cで処理を強制終了できます。

実行後に間違いに気付いたときなどは強制終了してください。

10万以上の大量のファイルではテストしていない

メモリ不足にでもならなければ動作するはずですが、試していませんので、実行する際はバックアップを取るなどして自己責任でお願いします。

変換リストは上から処理される

悪い条件指定の例を挙げます。

関する会議:会議
会議に関する会議:会議

このような条件を指定すると、最初の変換で「会議に関する会議」は「会議に会議」と変換されるので、「会議に関する会議」という条件にはヒットせず、「会議に会議」のままになってしまいます。

このように変換条件に同じ文字列が含まれる場合は、より文字列が多く複雑な条件を先に指定することで、この問題が解決できます。

次のように順番を入れ替えれば意図した結果にすることができます。

会議に関する会議:会議
関する会議:会議

短い文字データを条件にするときは慎重に

基本的に平仮名1文字などの短い文字データを条件にすると、想定外の結果になりやすいので、短い文字列は変換条件にしないことをおすすめします。

指定するなら、変換リストの末尾に、全角スペースを半角スペースへ変換するなどと指定するのがおすすめです。

変換されるファイルを先に確認したい

無料ツールの everything や Flexible Renamer などで変換条件を検索して確認してください

ヒットしない条件を指定しても意味がないので、先に確認するのがおすすめです。私も everything で検索してヒットしたものを検索条件リストに追加して使っています。

開発の世界ではYAGUNI(ヤグニ)といって、”必要になるまで作らなくてよい(必要ないだろう)”という考え方があります

処理速度が落ちるというデメリットもあるので、私は作らないでしょうが、変換の実行前にエラーや警告が出れば便利でしょう。作りたい人がいたら自作してみてください。

個人的には逆に、Flexible Renamer に複数検索条件の一括変換機能を実装してもらえると助かります。

自己責任でお願います

基本的にプログラムの動作や実行して起こった問題の責任は取れませんので、ご自身の判断で慎重に開発/実行してください。

検索条件には正規表現が使えるかもしれませんが、試していません。

変換リストの記述ミスやプログラム自体のミスでおかしなファイル名になり、大問題になる恐れもあります。

実際に活用する前には動作確認し、さらに変換対象ファイルのバックアップをとっておくことをおすすめします。

今回のスクリプトはいわゆるバッチ処理をするプログラムなので、安定的な動作が確認できるまでは、バックアップを取ってから実行するのが基本です。

まとめ

なぜ複数変換リストから一括変換する無料ツールがないのかは謎ですが、ちょっとした工夫で便利なツールが作れる良い例になっただろうと思います。

自画自賛ですが、処理が早く、条件を追加して何度も使えるので便利なツールができました。

このブログではプログラムのロジックの考え方を説明した記事が人気なのですが、エンジニアであれ自分で工夫することが大事なので頭を柔らかくしておくといいです。

あわせて読みたい

そもそもプログラミングが辛くて挫折しそうな人には次の記事がおすすめです。

あわせて読みたい

他の複数ファイルリネームツール

ないから作ったのですが、後から見つかったので追記しておきます。ワード(MS Word)のマクロでも実現できるそうです。

そうなるとVBAあたりでも実現できるかもしれません。

ちなみに、ワードやエクセルは独自ルールなのでエンジニアには逆に使いにくいです。あまりおすすめではありません。

参考:複数条件で文字を置換してファイル名を一気に変更する方法
URL:https://plaza.rakuten.co.jp/kabatan/diary/201605140000/

よくある質問

この質問はWindows初心者の方向けの簡単な説明なので注意してください。

注意

Windows11では、以下の項目で説明しているメニューがエクスプローラーの右クリックメニューに表示されないことがあります。

「その他のオプションを確認」をクリックすると表示されるようになるので注意してください。

その他の旧オプションを表示するのも同じ方法なので覚えておくとよいでしょう。

多くのファイルをリネームするには?

一般的には、Windowsで複数のファイルを一括リネームするには、エクスプローラーでCtrlキーを押しながらクリックしたり、Shiftキーを押しながら範囲選択するなどしてから、右クリックで「名前の変更」を選ぶと、全ファイルを同じ名前にしてカッコ付きの数字で連番を付けることができます。

同じことがF2キーからもできます。F2キーが「名前の変更」のショートカットキーになっているので、エクスプローラーでファイルを選択した後にF2キーを押すことで同じリネームができます。

ウィンドウズで同じ名前の連番ファイルを作るときには便利な機能です。

Windowsのファイルやフォルダ名の一括変更方法は?

エクスプローラーでファイルやフォルダを複数選択し右クリックの「名前の変更」やF2のショートカットキーから一括変換することができます。

ウィンドウズではファイルもフォルダも同じようにリネームすることができます。

ファイルの複数選択

ウィンドウズでファイルを何個も選択するにはいくつかの方法があります。

  1. Ctrlキーを押しながらクリックで選択/選択解除
  2. Shiftキーを押しながらクリック
  3. Shiftキーを押しながら↑↓キー
  4. Ctrl+Aのショートカットで全ファイル選択

いくつかのファイルをひとつにまとめるには?

エクスプローラーで複数のファイルを選択し、右クリックで「送る」、「圧縮(zip形式)フォルダー」を選択すると、1つの圧縮ファイルにまとめることができます。

編集後記(おまけ)

今回の開発では、私が要件定義から設計まで担当し、AIが実装しました。それを私が修正し、テストして完成という流れになりました。

肝心のプログラミングというエンジニアの仕事はAIがほぼやっています。

私の仕事は、もはやエンジニアというよりAIプロンプターに近くなっていると感じました。

これはもしかするとブログ記事も書けるのではないかと思いAIに書かせてみました。

次の引用文がGhatGPTの書いた記事です。指示したプロンプトは次の通りです。

「「変換パターンリストを元に全ファイル名を一括変換するプログラム(ツール)」というタイトルのブログ記事を3500文字前後で書く。SEO やユーザーニーズ、検索意図なども考慮した品質の高い記事にすること。」

変換パターンリストを元に全ファイル名を一括変換するプログラム(ツール)

はじめに

デジタル化が進む現代社会では、ファイルの管理は日常的な作業となっています。特に、大量のファイルを扱うビジネスシーンでは、ファイル名の一貫性と整理が重要となります。しかし、手動で一つひとつのファイル名を変更するのは時間がかかり、ミスの可能性もあります。そこで今回は、変換パターンリストを元に全ファイル名を一括で変換するプログラムをご紹介します。

プログラムの概要

このプログラムは、指定した変換パターンリストに基づいて、指定したフォルダ内の全てのファイル名を一括で変換します。例えば、「打ち合わせ」を「会議」に、「ミーティング」を「会議」に統一するなど、複数の変換パターンを一度に適用することが可能です。

プログラムの特徴

複数パターンの一括変換

無料ツールなどでは正規表現も含めて1パターンしか元にできないため、複数パターンの変換を一度に行うことは難しいです。しかし、このプログラムでは複数パターンの変換を一度に行うことが可能です。

高速処理

このプログラムは PowerShell 7.0 を使用して開発されており、高速な処理が可能です。(PCの性能によります)

柔軟なカスタマイズ

変換リストはテキストファイルで管理されており、カンマ区切りの形式(CSV形式)で記述します。そのため、自由に編集してカスタマイズすることが可能です。

使用例

ビジネスシーン

複数の取引先が同じ言葉を異なる言葉で表現している場合、このプログラムを使用して言葉を統一することができます。例えば、「打ち合わせ」、「会議」、「ミーティング」、「話し合い」をすべて「会議」に統一することが可能です。

プライベートシーン

同じ内容を表すファイル名をいろいろな言葉で付けてしまった場合、このプログラムを使用して名前を統一することができます。例えば、「Programing」、「Program」、「Pg」、「Project」をすべて「Proj」に統一することが可能です。

まとめ

このプログラムは、複数ファイルのファイル名を一括で変換するための便利なツールです。ビジネスシーンやプライベートシーンで幅広く活用できます。ぜひお試しください。

注意事項

  • プログラムの動作や実行して起こった問題の責任は取れません。ご自身の判断で慎重に開発/実行してください。
  • 変換リストの記述ミスやプログラム自体のミスでおかしなファイル名になり、大問題になる恐れもあります。実際に活用する前には動作確認し、さらに変換対象ファイルのバックアップをとっておくことをおすすめします。

以上、変換パターンリストを元に全ファイル名を一括変換するプログラムについてご紹介しました。このプログラムが皆様のファイル管理作業の効率化に役立つことを願っています。次回もお楽しみに!

引用元:This article was written by ChatGPT

ChatGPT でこのページの文章を校正していたので、事前学習ができていたせいか、まずまず使えそうな文章が出来上がりました。

学習させずにここまで書けるなら、ブログ記事もAIに書かせた方がよさそうな勢いです。

事前学習をさせなければ、おそらく的外れな内容になるでしょうが、参考にするくらいなら十分な仕上がりといえます。

よく見かけるライターっぽい文章だけど、冒頭の動機付けはいいね。少なくとも、これを読んでAIが書いたと見破れる人は少ないはずだ。
 
タイトルしか指示していないからソースコードとかはないけど、私の記事を書き直せとか、シェルでの実装方法を示せと指示した訳ではないので、AIの回答としては間違ってないな。
 
「次回もお楽しみに!」とかAIなのにやる気まんまんなところも面白い。
  
次世代のAI活用フェーズでは、AIが書いた文章をAIに要約させて、それを音声化して倍速再生で聞くようなことになるかもね。

あわせて読みたい
【まとめ】開発や学習に使えるこのブログの技術情報 Python、PowerShell のサンプルコードや環境設定、入門用の考え方などを説明しています。 生成AIを使いこなそう エンジニアのマストツールとなる生成AIの使い方を説明し...
変換パターンリストを元に全ファイル名を一括変換するプログラム(ツール)

この記事が気に入ったら
いいねしてね!

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

コメント

コメントする

目次(読みたいところから読めます)