MENU

PowerShell でファイル名を一括変換する

お世話になります、株式会社エイトハンドレッド・テクノロジー本部の細江と申します。本記事では、Windows ローカル環境で CSV ファイルなどの名称を PowerShell を使って一括変換する方法をご紹介します。


ひとつのファイル名を変更する

Rename-Item -Path "☆☆☆☆☆" -NewName "★★★★★"

☆☆☆☆☆ 名称変更するファイルの格納場所とファイル名。
★★★★★ 変更後の名称。

以下の例では PowerShell のカレントディレクトリがファイル格納場所なので、☆☆☆☆☆ には変更前のファイル名のみ記述しています。

ひとつのファイル名を変更する前のエクスプローラー画面

C:\hatena-handson 配下にある CSV ファイル名を PowerShell で変更します。

ひとつのファイル名を変更するPowerShellコマンド画面

上記のコマンドを PowerShell で実行。(実行後は特に何も表示されません)

ひとつのファイル名を変更した後のエクスプローラー画面

C:\hatena-handson 配下にある CSV ファイル名が変更されました。


複数のファイル名を変更する

Get-ChildItem "☆☆☆☆☆" | Rename-Item -NewName {$_.Name -Replace "◇◇◇◇◇","◆◆◆◆◆"}

Get-ChildItem
指定したディレクトリ以下のファルダやファイルの情報を取得。
☆☆☆☆☆ 名称変更するファイルの格納場所。

| (パイプ)
最初のコマンド出力を次のコマンドに入力。
[Get-ChildItem] の実行結果を [Rename-Item] に渡しています。

{} (スクリプトブロック)
PowerShell で一連のコマンドや式をグループ化するためのもの。
この場合、[-Replace] 演算子の実行結果を [-NewName] に渡しています。

$_
現在のパイプラインオブジェクト(上記では [Get-ChildItem] の実行結果)を参照。

.Name
Name プロパティ。[$_] から名称を抽出しています。

-Replace
置換演算子。◇◇置換対象の文字列◇◇ を ◆◆置換後の文字列◆◆ に置換しています。

以下の例では PowerShell のカレントディレクトリがファイル格納場所なので、☆☆☆☆☆ には何も記述していません。

複数のファイル名を変更する前のエクスプローラー画面

C:\hatena-handson 配下にある複数の CSV ファイル名を PowerShell で変更します。

複数のファイル名を変更するPowerShellコマンド画面

上記のコマンドを PowerShell で実行。(実行後は特に何も表示されません)

複数のファイル名を変更した後のエクスプローラー画面

C:\hatena-handson 配下にある CSV ファイル名が変更されました。


最後に

データ分析関連の業務に従事していると、ローカル環境に保存されているサンプルデータなど、複数ファイルの名称をサクッとまとめて変更したいことがたまに発生します。

そうした際に活用できれば、と思い、自分自身の備忘も兼ねて投稿しました。本記事がどなたかのお役に立ちますように!