Windows PowerShellでファイル名を一括変更する方法|初心者でもすぐ使えるリネーム術

Windows

「大量のファイル名を一括で変更したい」
「ファイル名に日付や連番を入れたい」
そんなときに役立つのが PowerShellによるファイル名変更(リネーム) です。

Windowsのエクスプローラーで1つずつ名前を変えるのはとても面倒ですが、PowerShellを使えば一瞬で終わります。

この記事では、Windows PowerShellを使ってファイル名を変更する基本方法から、応用的なリネームまで、具体例を交えてわかりやすく解説します。

スポンサーリンク

PowerShellでファイル名を変更する基本

Rename-Itemの使い方

PowerShellでファイル名を変更する最もシンプルなコマンドは Rename-Item です。

単一ファイルの例

Rename-Item -Path "C:\data\old.txt" -NewName "new.txt"

これで C:\data\old.txtnew.txt に名前変更されます。

フォルダ内で実行する場合

Rename-Item -Path ".\old.txt" -NewName "new.txt"

カレントディレクトリ(.)での変更も簡単です。

Rename-Itemの基本パラメータ

  • -Path: 変更したいファイルのパス
  • -NewName: 新しいファイル名
  • -WhatIf: 実際に変更せずに結果を確認(テスト実行)
Rename-Item -Path "old.txt" -NewName "new.txt" -WhatIf

複数ファイルをまとめてリネームする方法

Get-ChildItemと組み合わせる

例えば、.txt ファイルをすべて「backup_」を付けた名前にしたい場合:

Get-ChildItem C:\data\*.txt | ForEach-Object {
    $newName = "backup_" + $_.Name
    Rename-Item $_.FullName -NewName $newName
}

コマンドの説明

  • Get-ChildItem: ファイル一覧を取得
  • ForEach-Object: 1つずつ処理
  • $_: 現在処理中のファイルを指します
  • $_.Name: ファイル名のみ
  • $_.FullName: フルパス

実行結果

sample1.txt → backup_sample1.txt
sample2.txt → backup_sample2.txt

のように一括で変更されます。

特定の文字列を置換する

ファイル名の一部を別の文字に変更したい場合:

Get-ChildItem C:\data\*.txt | ForEach-Object {
    $newName = $_.Name -replace "old", "new"
    Rename-Item $_.FullName -NewName $newName
}

これで「old」を含むファイル名が「new」に変更されます。

実践的なリネーム術

連番を付ける方法

基本的な連番付け

ファイルに1,2,3…と番号を付与:

$i = 1
Get-ChildItem C:\images\*.jpg | Sort-Object Name | ForEach-Object {
    $newName = "photo_$i.jpg"
    Rename-Item $_.FullName -NewName $newName
    $i++
}

0埋め連番(01, 02, 03…)

$i = 1
Get-ChildItem C:\images\*.jpg | Sort-Object Name | ForEach-Object {
    $newName = "photo_{0:D3}.jpg" -f $i
    Rename-Item $_.FullName -NewName $newName
    $i++
}

実行結果

photo_001.jpg
photo_002.jpg
photo_003.jpg
...

のように連番で並びます。

日付を付ける方法

現在日付をファイル名に入れる

$date = Get-Date -Format "yyyyMMdd"
Get-ChildItem C:\logs\*.log | ForEach-Object {
    $newName = "$date" + "_" + $_.Name
    Rename-Item $_.FullName -NewName $newName
}

ファイル作成日を使う

Get-ChildItem C:\photos\*.jpg | ForEach-Object {
    $date = $_.CreationTime.ToString("yyyyMMdd")
    $newName = "$date" + "_" + $_.Name
    Rename-Item $_.FullName -NewName $newName
}

実行結果

log1.log → 20250705_log1.log
log2.log → 20250705_log2.log

のように、ファイル名に日付が自動で入ります。

拡張子を変更する

Get-ChildItem C:\data\*.txt | ForEach-Object {
    $newName = $_.BaseName + ".bak"
    Rename-Item $_.FullName -NewName $newName
}

これで.txtファイルが.bakファイルに変更されます。

エラーを防ぐポイント

上書き防止

PowerShellの Rename-Item は同名ファイルがあるとエラーになります。同じ名前ができそうなときは注意しましょう。

重複チェック付きリネーム

Get-ChildItem C:\data\*.txt | ForEach-Object {
    $newName = "backup_" + $_.Name
    $newPath = Join-Path $_.Directory $newName
    
    if (-not (Test-Path $newPath)) {
        Rename-Item $_.FullName -NewName $newName
    } else {
        Write-Host "スキップ: $newName は既に存在します"
    }
}

名前に使えない文字を除去

ファイル名に \ / : * ? " < > | は使えません。必要なら -replace で置換しましょう。

$name = "sample:file.txt"
$cleanName = $name -replace "[:*/?<>|\\]", "_"

事前テスト実行

本格的にリネームする前に、-WhatIf を使って結果を確認:

Get-ChildItem C:\data\*.txt | ForEach-Object {
    $newName = "backup_" + $_.Name
    Rename-Item $_.FullName -NewName $newName -WhatIf
}

よくある質問

Q: 元のファイル名に戻したい場合はどうすればいいですか?

A: リネーム前にバックアップを取るか、元の名前を記録しておきましょう。

# リネーム前にCSVで記録
Get-ChildItem C:\data\*.txt | Select-Object Name, FullName | Export-Csv "backup_list.csv"

Q: 大量のファイルを処理する際の注意点は?

A: 数千個のファイルを処理する場合は、まず小さなテストフォルダで試してから本番実行することをおすすめします。

Q: サブフォルダ内のファイルも含めて処理したい場合は?

A: -Recurse パラメータを使用します:

Get-ChildItem C:\data\*.txt -Recurse | ForEach-Object {
    $newName = "backup_" + $_.Name
    Rename-Item $_.FullName -NewName $newName
}

まとめ

Windows PowerShellを使えば、以下のことが簡単にできます:

  • Rename-Item で簡単にファイル名を変更
  • Get-ChildItem と組み合わせて大量ファイルを一括リネーム
  • 日付や連番を付けて自動で整理
  • 文字列の置換や拡張子の変更

コメント

タイトルとURLをコピーしました