Windowsでフォルダ名を一括変更する方法|エクスプローラー・PowerShellでまとめてリネーム

Windows

「フォルダ名を一つずつ変えるのが面倒…」
「連番やルールを決めてまとめて名前を変えたい!」
そんなときに便利なのが、Windowsでのフォルダ名の一括変更です。

エクスプローラーを使った簡単な方法から、PowerShellを使ってより柔軟にリネームする方法まで紹介します。

この記事では:

  • エクスプローラーでの基本的な一括リネーム機能
  • PowerShellによる高度なフォルダ名変更テクニック
  • 安全に作業するための事前確認と復旧方法
  • 実際の業務で使える応用例とベストプラクティス

を解説します。これを読めば、たくさんのフォルダをスムーズに整理できるようになりますよ。

スポンサーリンク

エクスプローラーでの基本的な一括リネーム

Windows標準機能での連番リネーム

Windows 10/11のエクスプローラーには、複数のフォルダを選択して一括で連番を付ける機能が標準で搭載されています。

基本的な操作手順

ステップ1:フォルダの選択

  1. エクスプローラーで対象フォルダが入っているディレクトリを開く
  2. 変更したいフォルダを複数選択
    • 連続選択:最初のフォルダをクリック → Shiftを押しながら最後のフォルダをクリック
    • 個別選択:Ctrlを押しながら必要なフォルダを1つずつクリック

ステップ2:リネームの実行

  1. 選択したフォルダの1つを右クリック
  2. 「名前の変更」をクリック(またはF2キーを押す)
  3. 新しい名前を入力(例:「Project」)
  4. Enterキーを押して確定

結果例

Project
Project (2)
Project (3)
Project (4)
...

この方法の特徴

メリット

  • Windows標準機能なので追加ソフト不要
  • 操作が簡単で直感的
  • すぐに結果が確認できる

制限事項

  • 連番形式が固定(括弧付きの数字のみ)
  • 既存の名前を活用した変更はできない
  • 高度な条件指定やパターンマッチングは不可

エクスプローラーでの応用テクニック

選択順序による連番制御

名前順での並び替え後に選択

  1. 表示 → 並べ替え → 名前
  2. フォルダを順番に選択
  3. リネーム実行

これにより、アルファベット順や数字順で連番を付けることができます。

部分的な一括変更

特定のフォルダのみを対象にする

  1. 検索ボックスでフィルタリング
    • 例:「type:folder date:today」(今日作成されたフォルダのみ)
  2. 検索結果から必要なフォルダを選択
  3. 一括リネーム実行

PowerShellによる高度なフォルダ名変更

PowerShellの基本的な使い方

PowerShellの起動方法

方法1:スタートメニューから

  1. スタートボタンをクリック
  2. 「PowerShell」と入力
  3. 「Windows PowerShell」をクリック

方法2:エクスプローラーから

  1. 対象フォルダがあるディレクトリをエクスプローラーで開く
  2. アドレスバーに「powershell」と入力してEnter

方法3:Shift + 右クリック

  1. 対象ディレクトリでShift + 右クリック
  2. 「PowerShellウィンドウをここで開く」を選択

基本的なフォルダ名変更コマンド

フォルダ一覧の確認

現在のディレクトリのフォルダを表示

Get-ChildItem -Directory

出力例

Directory: C:\Users\Username\Documents\Projects

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2024-07-02     10:30                Project1
d-----       2024-07-02     10:31                Project2
d-----       2024-07-02     10:32                OldProject

単一フォルダの名前変更

基本構文

Rename-Item -Path "旧名前" -NewName "新名前"

実行例

Rename-Item -Path "Project1" -NewName "NewProject1"

一括変更のパターン例

パターン1:プレフィックス(接頭辞)の追加

すべてのフォルダ名の前に文字を追加

Get-ChildItem -Directory | Rename-Item -NewName { "2024_" + $_.Name }

実行前

Project1
Project2
OldProject

実行後

2024_Project1
2024_Project2
2024_OldProject

パターン2:サフィックス(接尾辞)の追加

すべてのフォルダ名の後に文字を追加

Get-ChildItem -Directory | Rename-Item -NewName { $_.Name + "_Backup" }

パターン3:文字列の置換

特定の文字列を別の文字列に置換

Get-ChildItem -Directory | Rename-Item -NewName { $_.Name -replace "Project","Task" }

実行例

  • Project1 → Task1
  • Project2 → Task2
  • OldProject → OldTask

パターン4:大文字・小文字の変換

すべて大文字に変換

Get-ChildItem -Directory | Rename-Item -NewName { $_.Name.ToUpper() }

すべて小文字に変換

Get-ChildItem -Directory | Rename-Item -NewName { $_.Name.ToLower() }

最初の文字のみ大文字(タイトルケース)

Get-ChildItem -Directory | Rename-Item -NewName { 
    (Get-Culture).TextInfo.ToTitleCase($_.Name.ToLower()) 
}

高度な一括変更テクニック

連番による完全なリネーム

基本的な連番(001形式)

$counter = 1
Get-ChildItem -Directory | Sort-Object Name | ForEach-Object {
    Rename-Item $_ -NewName ("Folder_{0:D3}" -f $counter)
    $counter++
}

結果例

Folder_001
Folder_002
Folder_003

日付を含むリネーム

作成日時を含む名前に変更

Get-ChildItem -Directory | Rename-Item -NewName { 
    $_.CreationTime.ToString("yyyy-MM-dd") + "_" + $_.Name 
}

結果例

2024-07-02_Project1
2024-07-02_Project2
2024-07-01_OldProject

条件付きリネーム

特定の条件を満たすフォルダのみ変更

# 名前に"Project"を含むフォルダのみ変更
Get-ChildItem -Directory | Where-Object { $_.Name -like "*Project*" } | 
Rename-Item -NewName { $_.Name -replace "Project","Task" }

作成日が特定期間内のフォルダのみ変更

$cutoffDate = (Get-Date).AddDays(-7)  # 7日前
Get-ChildItem -Directory | Where-Object { $_.CreationTime -gt $cutoffDate } | 
Rename-Item -NewName { "Recent_" + $_.Name }

正規表現を使った高度な置換

正規表現の基本パターン

数字の置換

# フォルダ名の数字を全て除去
Get-ChildItem -Directory | Rename-Item -NewName { $_.Name -replace '\d+','' }

複数の文字列を一度に置換

# 複数のパターンを一度に処理
Get-ChildItem -Directory | Rename-Item -NewName { 
    $newName = $_.Name
    $newName = $newName -replace 'old','new'
    $newName = $newName -replace 'temp','final'
    $newName = $newName -replace '\s+','_'  # スペースをアンダースコアに
    $newName
}

複雑なパターンマッチング

特定パターンの抽出と再構成

# "ProjectABC_20240702_v1" → "20240702_ProjectABC"
Get-ChildItem -Directory | Rename-Item -NewName { 
    if ($_.Name -match '(.+)_(\d{8})_(.+)') {
        "$($matches[2])_$($matches[1])"
    } else {
        $_.Name
    }
}

安全な一括変更のための手順

事前確認とテスト実行

ドライラン(実際には変更せず結果を確認)

変更結果を事前に確認

# 実際の変更内容を表示(変更は実行しない)
Get-ChildItem -Directory | ForEach-Object {
    $oldName = $_.Name
    $newName = "New_" + $_.Name
    Write-Host "変更: '$oldName' → '$newName'"
}

より詳細な確認スクリプト

$changes = @()
Get-ChildItem -Directory | ForEach-Object {
    $changes += [PSCustomObject]@{
        OldName = $_.Name
        NewName = "New_" + $_.Name
        FullPath = $_.FullName
    }
}
$changes | Format-Table -AutoSize

段階的な実行

少数のフォルダで最初にテスト

# 最初の3つのフォルダのみで試行
Get-ChildItem -Directory | Select-Object -First 3 | 
Rename-Item -NewName { "Test_" + $_.Name }

バックアップと復元

フォルダ名のバックアップ

名前変更前の状態を記録

# 現在のフォルダ名をCSVファイルに保存
Get-ChildItem -Directory | Select-Object Name, FullName | 
Export-Csv -Path "folder_backup.csv" -NoTypeInformation -Encoding UTF8

Write-Host "バックアップファイルを作成しました: folder_backup.csv"

バックアップからの復元

保存したバックアップから元の名前に戻す

# バックアップファイルからの復元
$backup = Import-Csv "folder_backup.csv"
foreach ($folder in $backup) {
    $currentPath = Split-Path $folder.FullName -Parent
    $currentFolders = Get-ChildItem -Path $currentPath -Directory
    
    # 元の名前に戻す処理(簡略化例)
    # 実際の復元では、現在の名前と元の名前の対応関係を
    # より詳細に管理する必要があります
}

エラーハンドリング

名前変更時のエラー対策

エラーを無視して続行

Get-ChildItem -Directory | ForEach-Object {
    try {
        Rename-Item $_ -NewName ("New_" + $_.Name) -ErrorAction Stop
        Write-Host "成功: $($_.Name)" -ForegroundColor Green
    } catch {
        Write-Host "エラー: $($_.Name) - $($_.Exception.Message)" -ForegroundColor Red
    }
}

重複名前の処理

同名フォルダが既に存在する場合の処理

Get-ChildItem -Directory | ForEach-Object {
    $baseName = "New_" + $_.Name
    $newName = $baseName
    $counter = 1
    
    # 同名が存在する場合は番号を付加
    while (Test-Path $newName) {
        $newName = $baseName + "_$counter"
        $counter++
    }
    
    Rename-Item $_ -NewName $newName
    Write-Host "変更完了: $($_.Name) → $newName"
}

実用的な応用例

ビジネス用途での活用例

プロジェクト管理での整理

日付とステータスを含む統一命名

# プロジェクトフォルダに日付とステータスを追加
Get-ChildItem -Directory | Rename-Item -NewName { 
    $date = Get-Date -Format "yyyy-MM-dd"
    $status = "Active"
    "${date}_${status}_$($_.Name)"
}

顧客データの整理

顧客IDと名前の統一フォーマット

# 顧客フォルダを "CustomerID_CustomerName" 形式に統一
$customerData = @{
    "田中商事" = "C001"
    "佐藤工業" = "C002"
    "鈴木物産" = "C003"
}

Get-ChildItem -Directory | ForEach-Object {
    $currentName = $_.Name
    foreach ($customer in $customerData.Keys) {
        if ($currentName -like "*$customer*") {
            $newName = "$($customerData[$customer])_$customer"
            Rename-Item $_ -NewName $newName
            break
        }
    }
}

個人利用での活用例

写真整理での活用

撮影日による整理

# 写真フォルダを撮影日で整理
Get-ChildItem -Directory | Where-Object { $_.Name -notmatch '^\d{4}-\d{2}-\d{2}' } | 
ForEach-Object {
    $date = $_.CreationTime.ToString("yyyy-MM-dd")
    $newName = "${date}_$($_.Name)"
    Rename-Item $_ -NewName $newName
}

学習資料の整理

科目と章番号による整理

# 学習資料フォルダの整理
$subjects = @{
    "math" = "数学"
    "eng" = "英語"
    "sci" = "理科"
}

Get-ChildItem -Directory | ForEach-Object {
    $folderName = $_.Name.ToLower()
    foreach ($key in $subjects.Keys) {
        if ($folderName -like "*$key*") {
            $chapter = if ($folderName -match '\d+') { $matches[0].PadLeft(2,'0') } else { "00" }
            $newName = "$($subjects[$key])_第${chapter}章"
            Rename-Item $_ -NewName $newName
            break
        }
    }
}

フリーソフトウェアの活用

おすすめのリネームツール

Bulk Rename Utility

特徴

  • GUI操作で直感的
  • 正規表現サポート
  • プレビュー機能付き
  • 無料で高機能

使用場面

  • PowerShellに慣れていない場合
  • 視覚的に確認しながら作業したい場合
  • 複雑な条件を組み合わせたい場合

Advanced Renamer

特徴

  • バッチ処理に特化
  • 多様なリネームルール
  • メタデータ活用可能
  • 無料版と有料版

使用場面

  • 大量のフォルダを定期的に処理
  • メタデータ(作成日時、サイズ等)を活用
  • 定型的なリネーム作業の自動化

PowerShellとの使い分け

PowerShellが適している場面

  • スクリプトによる自動化が必要
  • 他のPowerShell処理と組み合わせ
  • カスタマイズ性を重視
  • 学習コストを投資する価値がある

フリーソフトが適している場面

  • 一回限りの作業
  • 視覚的な確認を重視
  • 複雑なGUI操作が好ましい
  • PowerShellの学習時間がない

トラブルシューティング

よくある問題と解決法

問題1:「ファイルが使用中」エラー

エラー例

Rename-Item : 別のプロセスで使用されているため、プロセスはファイルにアクセスできません。

対処法

# フォルダを使用中のプロセスを確認
Get-Process | Where-Object { $_.Path -like "*対象フォルダパス*" }

# エクスプローラーでフォルダを開いている場合は閉じる
# 該当するアプリケーションを終了してから再実行

問題2:権限不足エラー

対処法

# 管理者権限でPowerShellを実行
# または、フォルダの権限を確認・変更
Get-Acl "フォルダパス" | Format-List

問題3:特殊文字を含むフォルダ名の処理

問題のある文字例

  • コロン(:)
  • アスタリスク(*)
  • クエスチョン(?)
  • 縦線(|)

対処法

# 無効な文字を除去または置換
Get-ChildItem -Directory | Rename-Item -NewName { 
    $cleanName = $_.Name
    $invalidChars = '[<>:"/\\|?*]'
    $cleanName = $cleanName -replace $invalidChars, '_'
    $cleanName
}

まとめ

Windowsでフォルダ名を一括変更する方法は、用途とスキルレベルに応じて使い分けることが重要です。

手法別の使い分けガイド

エクスプローラーでの連番リネーム

  • 適用場面:シンプルな連番付けが必要な場合
  • メリット:操作が簡単、即座に実行可能
  • 制限:形式が固定、高度な処理は不可

PowerShellでの高度なリネーム

  • 適用場面:複雑な条件や規則でのリネーム
  • メリット:高い柔軟性、自動化可能、条件指定可能
  • 学習コスト:中〜高程度

フリーソフトウェアの活用

  • 適用場面:GUI操作を重視、一回限りの作業
  • メリット:視覚的確認、プレビュー機能
  • 注意点:ソフトウェアのインストールが必要

安全な作業のためのベストプラクティス

  1. 事前確認:必ず対象フォルダの一覧を確認
  2. バックアップ:重要なデータは事前にバックアップ
  3. 段階的実行:小さな範囲でテスト後、全体に適用
  4. ドライラン:実行前に変更内容をプレビュー
  5. エラー処理:例外処理を含むスクリプト作成

コメント

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