ext-norm01

ゲームできないし暇だなーと思って HDD のデータ整理をしてました
生成するツールの影響だったり、ダウンロードしたものだったりで、拡張子に大文字が混ざってるファイルがいくつかありました
.MP3 みたいに全部大文字なのもあれば、 .Jpg みたいに一部が大文字なのも
なんか気持ち悪い
個人的には小文字に揃えたいところ

ひとつひとつフォルダを開いて確認していたのですが、残りフォルダ数を見てやる気が失せました
人がやる作業じゃないね

PowerShell でできないかなーと開いてこんなコマンドを打つと・・・

dir -recurse -file | where { $_.Extension -cmatch "[A-Z]" }

実行したフォルダ内にある大文字拡張子のファイルリストが並びます
便利!

実行してみた例はこんな感じ

PS D:\tmp> dir -recurse -file | where { $_.Extension -cmatch "[A-Z]" }


ディレクトリ: D:\tmp


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/04/26 15:33 0 file.Jpg


ディレクトリ: D:\tmp\folder01


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/04/26 15:33 0 file10.PNG

「D:\tmp\file1.txt」 という小文字拡張子ファイルも入ってますが、それはちゃんと除外されて表示されてません


実際の結果を見ると、大文字入り拡張子は思ったより少なく数十もありませんでした
一部例外で大文字拡張子だけど元のファイル名の保持しておきたいところもあったのと、数がそんなになかったので、変換スクリプトを考えるより手作業のほうが速いかなと手作業で小文字にすることにしました
第一部完

ファイルシステムと大文字小文字

手作業で大文字を小文字にリネームしていたのですが・・・
なぜか変換できないところがあります

もしや?と思ってドライブのプロパティを見ると・・・変換できないファイルがあるドライブはファイルシステムが exFAT でした

Windows ってファイルやフォルダの大文字小文字を区別しませんが、 NTFS ファイルシステム自体では区別されていて OS 側で区別しないようにしてるそうです
なので大文字から小文字に変換は普通にできます

ですが exFAT だと、ファイルシステムレベルで大文字小文字を区別しないんだとか
つまりエクスプローラでリネームしても大文字小文字のみの違いだと、同じ名前だから変更なし!となり何も変化しないようです

「A.TXT」を「A.txt」に変換したいとき、一旦大文字小文字以外の違いがある名前に変換して、
「A.TXT」→「_A.TXT」→「A.txt」とすれば小文字化できるのですが、これがすごく面倒です


これのせいで手作業でやる気が一気に無くなったので変換ツールを作ります
どうせならフォルダをドラッグアンドドロップしてファイルリストからチェックボックスで選択とかしたいよね、とか思った結果できたのがこちらです

ext-norm01

GUI は Electron で作ってます
本体は重いのでアプリケーション部分のプログラムだけを公開してます → ext-norm
もし使う場合は Electron 本体は適当に公式サイトからダウンロードしてください
作るときはローカルにあった 6 でしたが最新でも多分動くんじゃないでしょうか(未確認

◯注意
ファイル操作系のフリーソフトによく書かれてるように、バグがあったりして使ってファイルが消えたとか出ても一切責任は取れませんのでご注意ください
あと、 Windows で使えるのか知りませんが、 ext4 など大文字小文字を区別するファイルシステムを読み込んだときに、大文字小文字で別のファイルになってると上書きされます
区別しないので「A.TXT」と「A.txt」が別々のファイルとして存在して、その状態で「A.TXT」を「A.txt」に変換すると元の「A.txt」は上書きされて消えます


そんなわけで拡張子を小文字化できましたが、予想以上に時間がかかりました
まぁ暇つぶし目的だったので別にいいんですけどね