PowerShell: ファイル名を変更する(連番を追加)
PowerShellで単純にファイル名を変更するだけなら Rename-Itemコマンドレットで可能です。 変更する際にファイルに連番を追加したい場合、 他のコマンドと組み合わせることで出来ます。
例として、 次のようにファイル名の先頭に連番を追加するサンプルスクリプトを紹介します。
元のファイル名 | 変更後のファイル名 |
---|---|
a.txt | 001-a.txt |
b.txt | 002-b.txt |
c.txt | 003-c.txt |
次のような条件でファイル名に連番を追加します。
- 対象ファイルは「d:\temp」フォルダの拡張子が「.txt」のテキストファイル
- ファイル名でソート
- 先頭に「001-」「002-」のように3桁の0埋めされた連番を追加
スクリプトは次の通りです。
PowerShell
$i = 0 Get-ChildItem d:\temp\*.txt | Sort-Object Name | ForEach-Object { $i ++ # 連番作成 $serial = "{0:000}" -f $i # 連番+ファイル名 $name = $serial + "-" + $_.BaseName +$_.Extension # ファイル名変更 Rename-Item $_ $name }
上のサンプルコードは4つのコマンドレットを使っています。
コマンドレット | 概要 |
---|---|
Get-ChildItem | ファイル一覧を取得する |
Sort-Object | ソートする |
ForEach-Object | オブジェクトを列挙する |
Rename-Item | ファイル名を変更する |
対象ファイル名は「d:\temp\*.txt」の部分を変更します。
もしソートが不要なら「Sort-Object」の部分を省略してください。
連番の部分を変更したいなら「フォーマット演算子(-f)」を使っている
"{0:000}"の部分をアレンジしてください。
(関連記事: PowerShell: 0パディング(0埋め)の方法。1 → 001)