社内SEの話

日々起きたことの記録用

【Powershell】ファイル名を連番にリネーム

最近写真などを大量に扱ってOCRなどの処理をする機会がしばしば発生します。

取得した状態でもいいのですが、リネームしないとデバッグがしづらいです。

Pythonなどでリネームしてもいいのですが、Powershellのほうが圧倒的に楽なので、リネームはPowershellで処理させます。

手順

Step1

指定のフォルダに移動します。

Step2

Powershell コンソール起動

$i=0

Get-ChildItem -File | sort LastWriteTime | % { Rename-Item $_.Name ("{0:000}{1}" -f $i++, $_.Extension) }

もしカレントディレクトリ以外のフォルダに対してリネームする場合は

Get-ChildItem -File -Path ****

としてください

説明

1)Get-ChildItem:ファイル取得

-Fileをつけることでファイルのみ抽出される。もしフォルダを外したい場合は-Fileを外してください。

ちなみにlsコマンドはGet-ChildItemのエイリスなので、lsでも同様の結果になります。

learn.microsoft.com

2) 連番にしたい順番に並び替えをします。

今回はファイルが書き込まれた時刻が早い順に並び替えをしています。

並び替えのできる項目はGet-ChildItemで取得できる項目になります。

3) %{} はパイプラインから取得した値を受け取るための構文です

4) Rename-Item $.Name ("{0:000}{1}" -f $i++, $.Extension):連番にファイル名をリネームします。

Rename-Item

learn.microsoft.com

Rename-Item 変更前ファイル 変更後ファイル

$_.Name パイプラインから取得したファイル名

"{0:000}" -f $i++:フォーマット関数を使って数値にゼロ埋めした結果を返します。

$_.Extensionは拡張子を所持しています。そしてその結果を{1}に返します。

第一引数が連番、第二引数が拡張子のフォーマットになっています。

もし連番の前に指定の文字列を追加したい場合は"Test_{0:000}"としてください。