PowerShell: ファイル名を変更する(連番を追加)

PowerShellで単純にファイル名を変更するだけなら Rename-Itemコマンドレットで可能です。 変更する際にファイルに連番を追加したい場合、 他のコマンドと組み合わせることで出来ます。

例として、 次のようにファイル名の先頭に連番を追加するサンプルスクリプトを紹介します。

元のファイル名変更後のファイル名
a.txt001-a.txt
b.txt002-b.txt
c.txt003-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

PowerShell
PR