銀河鉄道

【PowerShell】指定フォルダ内のファイル名を一括リネームするスクリプト

サムネイル
[PowerShell]Auto Renamein the folder.

指定フォルダ内にあるファイルのファイル名を一括リネーム

たとえば、共通のプレフィックスをつける場合
(= 文頭に同じ文字列を追加する)

# 目的: カレントディレクトリ内の全ファイル名に統一プレフィックスを一括で追加する
# (ただし *.ps1 ファイルは除外)
# プレフィックスとして追加したい文字列を変数に格納
$Prefix = "2024_"

Write-Host "✅ ファイル名変更処理を開始します(*.ps1ファイルは除外)"

# 現在のディレクトリにあるファイルの一覧を取得、拡張子が「.ps1」でないものに限定
Get-ChildItem -Path . -File | Where-Object { $_.Extension -ne ".ps1" } | ForEach-Object {
    # フルパス(絶対パス)を変数に格納
    $CurrentFullName = $_.FullName
    
    # 新しいファイル名(プレフィックス + 元のファイル名)を生成
    $NewName = "$Prefix$($_.Name)"
    
    # Rename-Item 実行
    Rename-Item -Path $CurrentFullName -NewName $NewName
    
    # 変更したファイル名を表示
    Write-Host "👉 $NewName"
}

Write-Host "✅ 全ての対象ファイルへのプレフィックス付加が完了しました"

何をやってる?

.ps1(スクリプト自身)だけは除外し、誤って再帰的にリネームされることを防いでいる。

  1. プレフィックスの設定 $Prefix = "2024_" ここで付与したい文字列を指定する。
    例:2024_ を設定すると、report.xlsx2024_report.xlsx に変換される。
  2. 対象ファイルの取得 Get-ChildItem -Path . -File | Where-Object { $_.Extension -ne ".ps1" } カレントディレクトリ直下のファイルを取得し、拡張子 .ps1 を除外する。
    -File パラメータを使って、ディレクトリを除外している点もポイント。
  3. ファイル名の変更 Rename-Item -Path $CurrentFullName -NewName $NewName Rename-Item コマンドでリネームを実行。

改良ポイント

  • Dry Run(確認モード)
    実行前に -WhatIf を付与すれば、実際には変更せずに「何が起こるか」を確認できる。
    • Rename-Item -Path $CurrentFullName -NewName $NewName -WhatIf
  • 重複防止
    同じプレフィックスを複数回実行しないよう、次のようにフィルタ条件を追加できる。
    • Where-Object { $_.Extension -ne ".ps1" -and $_.Name -notlike "$Prefix*" }
  • 拡張子の限定
    もし特定のファイルタイプのみ対象にしたい場合は、-Include を使う。
    • Get-ChildItem -Path . -Include *.txt,*.csv -File

注意点

  • 実行ディレクトリを明確にする
    コマンド実行前に Set-Location で対象フォルダを指定すること。
    誤って他のディレクトリで実行すると、大量リネームのリスクがある。
  • ファイル名の重複に注意
    同じ名前のファイルが既に存在する場合、Rename-Item はエラーを返す。
    必要に応じて -ErrorAction SilentlyContinue を付与する。
  • ロールバック不可
    一度リネームを実行すると元に戻す機能はないため、バックアップを取っておくことを推奨。

著者

author
月うさぎ

編集後記:
この記事の内容がベストではないかもしれません。