✏️

PowerShellでファイルを一括リネームする

2025/01/09に公開

Windowsで大量のファイルをリネームするなら、手作業よりもPowerShellを使ったほうがずっとスマート! 簡単なスクリプトで一括リネームができるので、初心者でもすぐに始められます。 本記事では、基本的なサンプルから応用テクニックまでをわかりやすく紹介します。

PowerShellの基本操作

必要な準備

  1. PowerShellの起動
    スタートメニューで「PowerShell」と検索し、起動します。

  2. スクリプト実行ポリシーの設定(必要に応じて)
    スクリプトを実行する前に、以下のコマンドで一時的にポリシーを変更します(管理者権限が必要です)。
    システム設定の変更につきご使用の際は注意してください。

   Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

基本例: ファイル名のプレフィックスを変更

以下のスクリプトは、特定のファイルに新しいプレフィックスを追加する例です。
サンプルとして以下のようなフォルダとリネーム対象を用意しました。ひとつずつ手で修正していくと時間がかかる上にミスを誘発しやすいため、スクリプトでざっと修正してしまいたいです。

01-**.jpgの連番ファイルをすべて01-01-01-**.jpgに変更します。

PowerShell_Sample.ps1
# 新しいプレフィックス
$prefix = "01-01-01-"

# 対象フォルダ
$folderPath = "C:\Users\YourFolder"

# フォルダに移動
Set-Location -Path $folderPath

# ファイルをリネーム
Get-ChildItem -Filter "01-*.jpg" | ForEach-Object {
    $newName = $prefix + $_.Name.Substring(3)
    Rename-Item $_.FullName $newName
}
  • 変更例:
    00-01.jpg01-01-01-01.jpg

応用編

応用例1: ファイル名にタイムスタンプを追加

タイムスタンプを付与することで、ファイルの管理が容易になります。
下記コードでは既にタイムスタンプの形式をチェックし、付与されているファイルは無視して実行します。
タイムスタンプの存在チェックにはフォーマット指定を行っているため、実行には注意してください。

Add_Timestamp.ps1
$timestamp = Get-Date -Format "yyyyMMdd-HHmmss"
$folderPath = "C:\Users\YourFolder"

Set-Location -Path $folderPath

Get-ChildItem | ForEach-Object {
    $fileNameWithoutExtension = [System.IO.Path]::GetFileNameWithoutExtension($_.Name)
    $extension = $_.Extension

    if ($fileNameWithoutExtension -notmatch '^\d{8}-\d{6}_') {
        $newName = "{0}_{1}{2}" -f $timestamp, $fileNameWithoutExtension, $extension
        Rename-Item -Path $_.FullName -NewName $newName
    }
}
  • 変更例:
    image.jpg20241227-153000_image.jpg

応用例2: ファイル拡張子を一括変更

すべてのファイルの拡張子を .jpgから.png に変更する方法です。

Change_Extention.ps1
$folderPath = "C:\Users\YourFolder"

Set-Location -Path $folderPath
Get-ChildItem -Filter "*.jpg" | ForEach-Object {
    $newName = [System.IO.Path]::ChangeExtension($_.Name, ".png")
    Rename-Item $_.FullName $newName
}
  • 変更例:
    picture.jpgpicture.png
    (この変更はあくまでサンプルです。互換性等注意してください。)

応用例3: 特定のキーワードを含むファイルだけをリネーム

条件を指定してファイル名を変更します。

Rename_TargetWord.ps1
$folderPath = "C:\Users\YourFolder"

Set-Location -Path $folderPath
Get-ChildItem -Filter "*.jpg" | Where-Object { $_.Name -like "*target*" } | ForEach-Object {
    $newName = $_.Name.Replace("target", "processed")
    Rename-Item $_.FullName $newName
}
  • 変更例:
    target-image.jpgprocessed-image.jpg

コマンド

使用したコマンド

コマンド 説明
Set-Location 現在の作業ディレクトリを指定したパスに変更する Set-Location -Path "C:\path\to\dir"
Get-ChildItem 指定したディレクトリ内のファイルやフォルダを取得する Get-ChildItem -Filter "*.txt"
Rename-Item ファイルやフォルダの名前を変更する Rename-Item -Path "old.txt" -NewName "new.txt"
Write-Host コンソールにメッセージを表示する Write-Host "Process completed!"
Get-Date 現在の日付と時間を取得する Get-Date -Format "yyyyMMdd-HHmmss"
ForEach-Object 各オブジェクトに対してアクションを実行する Get-ChildItem
-notmatch 指定した正規表現に一致しないかを確認する if ($value -notmatch "pattern") { ... }
コマンド 説明
[System.IO.Path]::
GetFileNameWithoutExtension
ファイル名から拡張子を除いた部分を取得する [System.IO.Path]::
GetFileNameWithoutExtension("file.txt")
[System.IO.Path]::
ChangeExtension
ファイルの拡張子を変更する [System.IO.Path]::
ChangeExtension("file.txt", ".jpg")

標準的なコマンド

コマンド 説明
ls ディレクトリ内のファイルやフォルダを一覧表示 ls -l
cd 現在のディレクトリを変更 cd /path/to/folder
mkdir 新しいディレクトリを作成 mkdir new_folder
rm ファイルやディレクトリを削除 rm file.txt
cp ファイルをコピー cp source.txt destination.txt
mv ファイルやフォルダを移動または名前変更 mv old_name.txt new_name.txt
echo 指定したテキストを出力 echo 'Hello, World!'
cat ファイルの内容を表示 cat file.txt
touch 空のファイルを作成 touch newfile.txt

さいごに

PowerShellを使うことで、煩雑なファイルリネーム作業を効率的に自動化できます。この記事で紹介した方法を参考に、ぜひ日常業務や趣味の管理に活用してみてください! 😊

IT業界に、ITエンジニアに貢献する企業
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。

https://onewedge.co.jp/

Discussion