日別アーカイブ: 2021年5月3日

Powershellによるファイルのリネーム

画像や音楽データを整理していると、一括でファイル名を変更したくなる場面があります。

私の場合はかつて採用していたファイル命名ルールに問題があることが分かり、新しく決めたファイル命名ルールに更新したくなるというケースが多いです。

リネーム用ツールなども色々あるとは思うのですが、柔軟に運用できるという点でこういう時はPowershellの出番です。

Powershellによるファイルのパラメータ取得

Powershellでリネームを行う場合は”Get-Childitem”コマンドレットを使うのが一般的ではないかと思います。このコマンドレットはフォルダ内のファイルのパラメータを一括取得してくれます。私はもっぱらファイルやフォルダの処理に使いますが、レジストリハイブや証明書ストアにも使えるそうです。

今回はC:\Photoに入っているyyyymmdd.jpgという命名ルールで名前のついている画像データをyymmdd.jpgに変更するという場面を想定します。

まず、フォルダ内のjpgファイルの情報を取得するには以下の通りの記述でOKです。

[Powershell]
Get-Childitem "C:\Photo" *.jpg

拡張子を指定するとその拡張子に当てはまるファイルだけのパラメータを取得できます。

Powershellによるパイプライン接続

次にリネーム処理を行うためのパイプライン接続を行います。パイプラインというのはちょっと難しそうですが、連続した処理を行う際に1つ目の処理と2つ目の処理を接続する役割を果たします。

例えば、 フォルダ内のファイル名を取得する→特定のファイル名でフィルタする→結果をcsv出力する といった処理があった場合、矢印部分にパイプライン処理が使われます。記述は簡単で、専用の演算子”|”を入れるだけです。

Powershellによるリネーム

リネームを行います。取得されたファイル名のデータはパイプライン経由で使用できます。パイプライン経由のデータは自動変数”$_”に格納されているので、この変数に対して処理を行えば大丈夫です。

ファイルのリネームの場合は”Rename-Item”コマンドレットが使えます。コードはこんな感じになります。

[Powershell]
Get-Childitem "C:\Photo" *.jpg | Rename-Item -NewName {$_.Name -replace "20", ""}

自動変数のNameパラメータに対して”20″を””(空)に置き換える処理を行っています。

続きを読む