2015年7月29日水曜日

[PowerShell] ファイル名のインデックスの桁数をそろえる

フォルダ内に以下のようなファイル群がある。

Image-1.jpg
Image-2.jpg
...
Image-9.jpg
Image-10.jpg
Image-11.jpg
...
Image-99.jpg
Image-100.jpg
Image-101.jpg
...
Image-150.jpg
 

Explorer ではこの順に並ぶが、単純にアルファベット順に処理するアプリでは Image-1.jpg、Image-10.jpg、Image-11.jpg … といった順序で処理されてしまう。
そこで PowerShell を使ってファイル名部分の桁数を、Image-1.jpg → Image-001.jpg というように揃えてみる。


正規表現を使ってファイル名を生成する


ファイル名を変更したいファイルがあるフォルダで、以下の2つのコマンドを実行することで期待通りに変更することができる。
Get-ChildItem . | Rename-Item -NewName { $_.Name -replace 'Image\-([0-9])\.jpg','Image-00$1.jpg' }
Get-ChildItem . | Rename-Item -NewName { $_.Name -replace 'Image\-([0-9])([0-9])\.jpg','Image-0$1$2.jpg' }

1つ目のコマンドで Image-1.jpg といった一桁ファイル名を Image-001.jpg と3桁化する。 2つ目のコマンドでは2桁ファイル名を3桁化する。 1つのコマンドでまとめてできないかとも思ったが実用上問題ないのでこれで良しとしよう。 Alias を 使って、
dir . | ren -NewName { $_.Name -replace 'Image\-([0-9])\.jpg','Image-00$1.jpg' }
dir . | ren -NewName { $_.Name -replace 'Image\-([0-9])([0-9])\.jpg','Image-0$1$2.jpg' }

とやっても可。これで、

Image-001.jpg
Image-002.jpg
...
Image-009.jpg
Image-010.jpg
Image-011.jpg
...
Image-099.jpg
Image-100.jpg
Image-101.jpg
...
Image-150.jpg
 

とよい感じになった。

0 件のコメント:

コメントを投稿