ファイル名のルールが変わったなどで、ファイル名をまとめて変換したいようなことはないだろうか。このような場合、エクスプローラーで手動により変更するのは大変だ。コマンドプロンプトのrenコマンドでは、拡張子を変えるような場合はいいのだが、ファイル名を柔軟に変更できない。このような場合はWSLのrenameコマンドを使うとよい。その方法を紹介する。
対象:Windows 10
ファイル名のルールが変更になって、複数のファイルを一括で変換したいということはないだろうか? 例えば、abc01.jpg、abc02.jpg、……、abc90.jpgといったファイル名を、abc001.jpg、abc002.jpg、……、abc090.jpgといったように数字部分を3桁にしたいとか、「abc」の部分を「abc_xyz」にしたいとか、ということだ。
このような場合、ファイル数が少なければ、エクスプローラーで順番にファイル名の変更を行えばよいが、数十、数百ともなると手間がかかる。こうした処理はコマンドプロンプトが得意のはずなのだが、ファイル名を一括で変更しようとするとうまくいかない(拡張子を変更する程度なら問題ないが)。
PowerShellを使えば、ある程度、柔軟にファイル名を一括変換可能だが、PowerShellを使いこなすのはハードルが高いと感じている人も多いことだろう(PowerShellによるファイル名の一括変換については、Tech TIPS「Windows PowerShellを使って複雑なパターンのファイル名変更を行う」参照のこと)。
実はWindows 10ならば、Linuxのプログラムを実行可能にする「WSL(Windows Subsystem for Linux)」をインストールすることで、Linuxの「rename」コマンドが利用できるようになるため、かなり柔軟なファイル名の一括変換などが行える。本TIPSでは、その方法を紹介しよう。
残念ながらデフォルトでは、WSLがインストールされていないので、Tech TIPS「Windows 10でLinuxプログラムを利用可能にするWSLをインストールする(バージョン1803以降対応版)」を参考にして、WSLをインストールしておく。WSLでは、複数のディストリビューションがサポートされているが、本TIPSでは当初からサポートされていたUbuntu環境で解説していく(ディストリビューションによってコマンドのオプションが異なるので注意)。
インストール後は、「sudo apt update」と「sudo apt upgrade」コマンドを使ってシステムやパッケージを更新しておく。
ファイル名の変更するrenameコマンドは、Ubuntuにデフォルトではインストールされていない。そこで、UbuntuをインストールしたらUbuntuを起動し、以下のコマンドを実行して、renameコマンドをインストールする(aptコマンドについては、Tech TIPS「WSLのUbuntu環境で「apt」コマンドを使ってパッケージを更新/管理する」参照のこと)。renameコマンドのインストールは、一度、行えばよいので、すでにインストールされている場合は、スキップしてよい。
sudo apt install rename
renameコマンドをWSL上でそのまま使ってもよいが、ここではコマンドプロンプト上でLinuxのrenameコマンドを呼び出して使ってみる。WSLとWindows OSのパスの表記方法は少し異なっているので、コマンドプロンプトの扱いに慣れたユーザーなら、この方が簡単かもしれない。
renameコマンドがインストールできたら、コマンドプロンプトを開く(コマンドプロンプトを素早く開く方法は、Tech TIPS「Windows 10でコマンドプロンプトを素早く起動する方法」を参照のこと)。
ファイル名を変更したいフォルダにカレンドディレクトリを移動し、「wsl rename」コマンドを実行する。コマンドプロンプトでもLinuxコマンドの前に「wsl」と付けることで直接、実行することができる(Tech TIPS「Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版」参照のこと)。
renameコマンドでファイル名の変換を行う場合、以下のようにパラメーターを指定する。
rename 's/<置換したい文字列>/<置換後の文字列>/' <対象ファイル>
Ubuntuのrenameコマンドは、正規表現で置換する文字列を指定できるので、柔軟なファイル名の一括変換が可能だ。また、対象ファイルは任意の文字列を「*(アスタリスク)」で、任意の一文字を「?(疑問符)」でマッチさせるワイルドカードが利用できる。これを使って、特定の拡張子のファイル名のみを一括で変換させることも可能だ(対象ファイルとして「*.png」などと指定する)。
例えば、フォルダ内のPNGファイルのファイル名を「abc」から「abc_xyz」に変更したいのであれば、以下のコマンドを実行すればよい。
wsl rename 's/abc/abc_xyz/' *.png
なお、変換したファイル名を戻すことはできないので、変換ミスなどをした場合でも困らないように、フォルダごとコピーしてからファイル名を一括変換して、元のフォルダを削除するなどするとよい。
上記のパラメーターはUbuntuの場合だが、renameコマンドはディストリビューションによって以下のようにパラメーターを指定するものもある。Ubuntuとはパラメーターの構成が異なっているので注意したい。
rename <置換したい文字列> <置換後の文字列> <対象ファイル>
Copyright© Digital Advantage Corp. All Rights Reserved.