2021.10.28  

【PowerShell】複数フォルダにあるファイルの名前を一括置換する

PowerShell    

やりたいこと

Windows10で各フォルダの中にある「ほげほげ_管理ファイル.txt」を「ひげ_管理ファイル.txt」に一括変更したい。

また、Backupフォルダの中にあるファイルも一括変更したい。

今回編集を行うフォルダとファイルの構成イメージは次のようになります。

PS C:\Users\hoge\OneDrive\デスクトップ\work> tree /f
フォルダー パスの一覧
ボリューム シリアル番号は 962B-11F7 です
C:.
├─管理No.1
│  │  ほげほげ_管理ファイル.txt
│  │  商品_管理ファイル.txt
│  │  顧客_管理ファイル.txt
│  │
│  └─Backup
│          ほげほげ_管理ファイル_20211028.txt
│
├─管理No.2
│  │  ほげほげ_管理ファイル.txt
│  │  商品_管理ファイル.txt
│  │  顧客_管理ファイル.txt
│  │
│  └─Backup
│          ほげほげ_管理ファイル_20211028.txt
│
└─管理No.3
    │  ほげほげ_管理ファイル.txt
    │  商品_管理ファイル.txt
    │  顧客_管理ファイル.txt
    │
    └─Backup
            ほげほげ_管理ファイル_20211028.txt

前提:ファイルのリネームの仕方

ファイルのリネームにはPowerShellを使います。
PowerShellとはWindows10に標準インストールされているツールです。

まず、Win10の検索欄からWindows PowerShellを検索、起動して、次のコマンドを実行します。
すると、管理No.1ディレクトリのファイル名を部分置換できます。

cd C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1
dir | rename-item -newname { $_.name -replace 'ほげほげ_', 'ひげ_'} 

・コマンド実行前

PS C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1> dir


    ディレクトリ: C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l        2021/10/28     18:19              0 ほげほげ_管理ファイル.txt
-a---l        2021/10/28     18:19              0 商品_管理ファイル.txt
-a---l        2021/10/28     18:21              0 顧客_管理ファイル.txt

・コマンド実行後

PS C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1> dir


    ディレクトリ: C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l        2021/10/28     18:19              0 ひげ_管理ファイル.txt
-a---l        2021/10/28     18:19              0 商品_管理ファイル.txt
-a---l        2021/10/28     18:21              0 顧客_管理ファイル.txt


PS C:\Users\hoge\OneDrive\デスクトップ\work\管理No.1>

ディレクトリの中のファイルを書き換える

ディレクトリの中のファイルを一度に書き換えるには、バッチファイルを作成する必要があります。
次のようなファイルを作成、実行することで、ディレクトリ内のファイル名をすべてリネームできます。
$PSScriptRootは実行するスクリプトの格納先を自動で保持する変数です。

ファイル名: rename.ps1
# スクリプトの格納先を取得する
$script_dir=$PSScriptRoot

# ディレクトの数だけループする
for ($i=1; $i -lt 4; $i++){

  # 各管理Noディレクトリに移動
  cd $script_dir\管理No.$i

  # ファイルをリネーム
  dir | rename-item -newname { $_.name -replace 'ほげほげ_', 'ひげ_'}

  # Backupに移動
  cd $script_dir\管理No.$i\Backup

  # ファイルをリネーム
  dir | rename-item -newname { $_.name -replace 'ほげほげ_', 'ひげ_'}
  }

workディレクトリでバッチファイルを実行します。

# workディレクトリへ移動
PS C:\Users\hoge> cd C:\Users\hoge\OneDrive\デスクトップ\work
# バッチファイルを実行
PS C:\Users\hoge\OneDrive\デスクトップ\work> .\rename.ps1

すると次のように全てのファイルを書き換えることができます。

PS C:\Users\hoge\OneDrive\デスクトップ\work> tree /f
フォルダー パスの一覧
ボリューム シリアル番号は 962B-11F7 です
C:.
│  rename.ps1
│
├─管理No.1
│  │  ひげ_管理ファイル.txt
│  │  商品_管理ファイル.txt
│  │  顧客_管理ファイル.txt
│  │
│  └─Backup
│          ひげ_管理ファイル.txt
│
├─管理No.2
│  │  ひげ_管理ファイル.txt
│  │  商品_管理ファイル.txt
│  │  顧客_管理ファイル.txt
│  │
│  └─Backup
│          ひげ_管理ファイル.txt
│
└─管理No.3
    │  ひげ_管理ファイル.txt
    │  商品_管理ファイル.txt
    │  顧客_管理ファイル.txt
    │
    └─Backup
            ひげ_管理ファイル.txt

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信