PowerShell

こんにちは!皆さんはファイル名を変更する時にどのように変更していますか?

ファイルによって特別なファイル名にしたい場合は手入力せざるをえませんが、決まりのある命名規則に合わせてファイル名を変更するのに毎回手入力するのは時間がもったいないです!

今回はPowerShellを使用してファイル名を一括でリネームする方法をサンプル付きでご紹介してきます。

主に使用するコマンドレットはファイル名変更に使用するRename-Itemです。

1つのファイル名を変更

さっそくサンプルコードをご紹介していきましょう。

Rename-Item -Path “名前を変更するファイルパス” -NewName “新しいファイル名”

Rename-Item:名前を変更
Pathパラメータ:名前を変更するファイルパスを設定
NewNameパラメータ:新しいファイル名を設定

Rename-Item -Path 'C:\sample\in\345525_s.jpg' -NewName 'nyan_001.jpg'

実行すると、ファイル名が「345525_s.jpg」から「nyan_001.jpg」に変更されました。

複数のファイル名を一括に変更

先ほどの例だと1ファイルずつしか変更できませんでした。

これでは実用性はあまりないと言えます。。。

次はファイル名の置換する文字列を指定して一度にファイル名を変更していきます。

Get-ChildItem  “処理対象ファイルの条件” | Rename-Item -NewName{ $_.Name -Replace “置換する文字列”, “置換後の文字列” }

Get-ChildItem “条件”:ディレクトリ内のファイルのうち、指定した条件に当てはまるファイルの情報を取得
Replace演算子:文字列を置換

Get-ChildItemで条件を付けることにより、条件に当てはまるファイルに対して一括でファイル名を変更することができます。

Get-ChildItem "C:\sample\in\*.jpg" | Rename-Item -NewName{$_.Name -Replace "\.jpg",".jpeg"}

このコマンドを一度実行すると、ファイル拡張子が「jpg」から「jpeg」に変更されました。

実行前のファイル一覧
実行後のファイル一覧

ファイル名に命名規則を指定して連番を付ける

最後に複数のファイルに対して命名規則を指定して連番を付けてファイル名を一括で変更していきます。

Get-ChildItem “処理対象ファイルの条件” | Sort Name | % { $i = 1} { $Newname = “命名規則” + $i.ToString(“000”) + $_.extension; Rename-item $_ $Newname; $i++ }

Get-ChildItem “条件”:処理対象のファイルを指定
Sort Name:ファイル名でソート
%:Foreach-Objectのエイリアス
Rename-Item:名前を変更

$Newname:変更後のファイル命名規則
$i.ToString(“000”):3桁0詰め表記

先ほどと同様に処理対象のファイルの条件で複数のファイルを一括で処理することができます。

また、ファイル名でソートすることにより、連番を付与したファイルの順番がエクスプローラで表示された順番そのままになります。

Get-ChildItem "C:\sample\in\*.jpg" | Sort Name | % { $i = 1} { $Newname = "picture_" + $i.ToString("000") + $_.extension; Rename-item $_ $Newname; $i++ }
実行前のファイル一覧
実行後のファイル一覧(連番付与後)

終わりに

いかがでしたでしょうか?
コードをコピペして少し変更するだけで簡単に試せるので是非やってみてください!

今回参考にさせていただいたサイト:
Powershellでフォルダ内のファイル名に連番を付ける:lsと%とRename-Itemで