ファイル名を一括変更する方法|F2で足りる場合と、001にする方法

ファイル名の一括変更で、F2で足りる場合と足りない場合、コマンドの書き方によっては50件で壊れたことを示す見出し画像

ZEN AI LAB のキャラクター ZEN

監修:ZEN AI LAB(ZEN)

人間1人とAI社員で動く会社です。記事の数値は自社の作業ログの実測、仕様や料金は公式の一次情報で確認しています。確認した日付は本文に書いています。

数百枚の写真を「商品_001」「商品_002」の形にそろえたいとき、全部選んでF2キーを押し、名前を入れてEnterを押すと、できあがるのは「商品 (1)」「商品 (2)」の形です。

Canonのサポートページ(2016年)の手順でも、ZEN AI LABがWindows 11で動かした結果でも、F2で付く番号は「(1)」の形です。この形でよければF2で足ります。001の形にしたい、かっこを消したい、名前の一部だけ置き換えたい、というときは、別の方法が要ります。

この記事では、F2で足りる場合と足りない場合を分けて、足りないときに無料で使える方法を選べるようにします。コマンドを貼るときの落とし穴も、実際に動かした範囲で載せます。後半では、ZEN AI LABが作った自社ツールのRenameFlow(無料版は10件まで、有料版は300円)にも触れます。

F2で足りるのは、「名前 (1)」の形でよいとき

やりたいことで、使う方法を選びます。

やりたいこと試す方法
全部に同じ名前と連番を付ける(かっこ付きでよい)F2
001の形、かっこなしの連番にするPowerRename(Microsoftの無料ツール)
名前の一部だけ置き換える、消すPowerRename(同上)
一度きりで、コマンドを貼ってもよい確認つきのスクリプト(コピーして貼るコマンド。後半に載せています)
毎回同じ作業で、書式を覚えたくないRenameFlow(後半で紹介)

F2の手順は3つです。

  1. 名前を変えたいファイルを全部選びます
  2. F2キーを押します
  3. 新しい名前を入力して、Enterキーを押します

注意したいのは、番号の始まりです。番号は、最後にクリックしたファイルから始まり、表示されている順に続きます。ZEN AI LABがWindows 11で試すと、先頭のファイルをクリックしてからShiftキーを押して最後のファイルをクリックした場合は、最後のファイルが「(1)」になりました。そのあとは先頭のファイルへ戻って「(2)」と続きます。先頭のファイルを「(1)」にしたいときは、逆に、最後のファイルをクリックしてからShiftキーを押して先頭のファイルをクリックします。F2にはプレビューがなく、変えたあとはエクスプローラーでCtrl+Zキーを押すと戻せます(9件で確認)。

2021年と2023年のYahoo!知恵袋のやり取りも、同じ形を前提にしています。2021年の質問には、「(1)」のかっこを外したいというものがありました。2010年にも、写真が数百枚あって「(1)(10)(100)」の順に並んでしまう、という質問があります。

順番を自分で決めたい場合、2021年のYahoo!知恵袋の回答には、ドラッグで並べ替えられるリネームソフトが挙がっていました。

001の形やかっこなしにするなら、無料のPowerRename

PowerRenameは、Microsoftが出している無料のツール集PowerToysの機能です。ZEN AI LABのWindows 11では、PowerToysを入れた直後から有効で、ファイルを選んで右クリックすると「PowerRenameで名前を変更」が出ました。変更前にプレビューで確認でき、エクスプローラーのCtrl+Zで戻せます。10件、12件、50件、100件のどれも、Ctrl+Zで全件が元の名前に戻りました。

001の形にするには、PowerRenameの画面に次のように入れます。

検索対象       :^.*$
正規表現を使用    :チェックを入れる
適用の対象      :ファイル名のみ
置換の候補      :商品_${start=1;padding=3}

^.*$ は「名前の全体」を表す書き方(正規表現)で、start が始める番号、padding が桁数です。「商品 (1).jpg」から「商品 (12).jpg」の12件は、「商品_001.jpg」から「商品_012.jpg」になりました。番号は名前の自然順(1、2、…、9、10の順)で振られ、エクスプローラーを降順で表示していても同じでした。かっこを外すだけなら、検索に \s\((\d+)\)、置換に _$1 を入れます。「商品_1.jpg」の形になり、桁はそろいません。名前の一部だけを置き換えたり消したりするのも、同じ画面の検索と置換でできます。

つまずきやすい所は4つです。

  • 「適用の対象」の初期設定は「ファイル名 + 拡張子」でした。このまま ^.*$ を使うと .jpg も置き換わり、「商品_001」のように拡張子が消えます。プレビューには出ますが、警告はありません
  • 「正規表現を使用」にチェックがないと、^.*$ は文字として探され、プレビューが空になります
  • 前回の検索と置換の内容が残った状態で開きます。同じ作業を繰り返すときは便利ですが、別の作業で使うときは入れ直してください
  • 変更後と同じ名前のファイルが同じフォルダにあっても、警告は出ませんでした。そのファイルは上書きされず、変えた側が「商品_003 (2).jpg」の形になりました。画面の一覧には「商品_003.jpg」のまま出るので、実際の名前はエクスプローラーで見てください

操作の手順は、ファイル名を一括で連番にする方法に画面つきで書いています。

PowerRenameの難点は、PowerToysを入れる手間と、書式を覚える手間です。PowerToysの入れ方は、Microsoftの案内にあります。ここまでで足りるなら、次の節は読まなくて構いません。

コマンドで書くなら、貼る前に確認と元に戻す記録をつける

PowerShellは、Windowsに入っている、文字でコマンドを打つ道具です。スタートメニューで「PowerShell」と検索すると開けます。cmd(コマンドプロンプト)も同じ種類の道具です。

ZEN AI LABは、「商品 (1).jpg」から「商品 (n).jpg」までを「商品_001.jpg」の形にする作業を、コマンドで動かしました。「商品 (2)」は002、「商品 (10)」は010にしたい、という前提です。

最初に試したのは、Get-ChildItem(フォルダのファイルを取る命令)の結果を、パイプ(前の結果を次の命令へそのまま流す書き方)で ForEach-Object に渡し、その中で Rename-Item(名前を変える命令)を呼ぶ書き方です。コードは、この記事の末尾に載せています。結果は次のとおりでした。

パイプで渡して、その中で名前を変える書き方では、50件のはずが名前が1000番台になった。数字を桁そろえしてから並べて変えた場合は、50件とも商品_001から商品_050になった

10件、15件、20件、30件では、名前の変更の回数は件数と同じでした。ただし、元の名前を長くして試し直すと(2026年11月6日)、40字の名前では20件でも名前の変更が二重に起きました。件数が少なければ起きない、とは言えません。50件と100件では、3回とも名前が1000番台になり、エラーの表示はありませんでした。新しい名前(商品_001)が、元の名前(商品 (1))より後ろに並ぶため、名前を変えたファイルがもう一度拾われたようです。新しい名前を「000_商品_001」にして元の名前より前に並べると、50件でも100件でも起きませんでした。Get-ChildItem の結果を先に配列(いったん一覧にまとめたもの)にしてから渡す書き方でも、起きませんでした。

自分のコマンドが同じ形かどうかは、こう見分けられます。Get-ChildItem の結果をパイプでそのまま渡し、その中で名前を変えているなら、同じ形です。

最初の書き方では、ほかにも2つのことが起きました。

  • 10件でも、「商品 (10).jpg」が「商品_002.jpg」になりました。文字の順(1、10、2、3の順)で番号を振るためです。cmdの for /L で ren を回す書き方では、桁がそろわず、100件を文字の順に並べると1、10、100、11、12の順になりました
  • 12件を連番にする途中に、同じ名前のファイルがあると、1件だけ失敗し、残りの11件は変わった状態になりました

数字を桁そろえしてから並べ替え、結果を配列にしてから名前を変える書き方に直すと、10件、50件、100件、1,000件、5,000件のすべてで、元の番号どおりの連番になりました。この形に、確認と元に戻す記録をつけたのが、次のスクリプトです。

確認してから実行でき、元に戻せるスクリプト

使う前に、名前を変えるフォルダを、フォルダごとコピーしておいてください。

$dir    = 'C:\Users\あなた\Pictures\商品'   # 名前を変えるフォルダ
$filter = '*.jpg'                           # 対象(すべてなら '*')
$base   = '商品'                            # 新しい名前の前半('' なら 001.jpg の形)
$digits = 3                                 # 桁数(3 なら 001)
$apply  = $false                            # $false は確認だけ、$true で実行
& {
  $files = @(Get-ChildItem -LiteralPath $dir -File -Filter $filter |
    Sort-Object { [regex]::Replace($_.Name, '\d+', { param($m) $m.Value.PadLeft(12, '0') }) })
  $i = 0
  $all = foreach ($f in $files) {
    $i++
    [pscustomobject]@{ Old = $f.Name; New = (($base + '_' + $i.ToString("D$digits")).TrimStart('_') + $f.Extension) }
  }
  $plan = @($all | Where-Object { $_.Old -ne $_.New })
  if (-not $plan) { Write-Host '変更するファイルがありません。'; return }
  $plan | Format-Table -AutoSize
  $same  = $all | Group-Object New | Where-Object Count -gt 1
  $clash = $plan | Where-Object { $_.New -notin $all.Old -and (Test-Path -LiteralPath (Join-Path $dir $_.New)) }
  if ($same -or $clash) { Write-Host 'NG: 同じ名前になるファイルがあるため、何も変更しません。'; return }
  if (-not $apply) { Write-Host '確認だけです。変更するときは $apply = $true にして、もう一度貼り付けます。'; return }
  $log = "$env:USERPROFILE\Desktop\rename_log_" + (Get-Date -Format yyyyMMdd_HHmmss) + '.csv'
  $plan | Export-Csv $log -NoTypeInformation -Encoding UTF8
  $plan | ForEach-Object { Rename-Item -LiteralPath (Join-Path $dir $_.Old) -NewName ('~tmp_' + $_.Old) }
  $plan | ForEach-Object { Rename-Item -LiteralPath (Join-Path $dir ('~tmp_' + $_.Old)) -NewName $_.New }
  Write-Host ("{0} 件の名前を変更しました。元の名前の記録: {1}" -f $plan.Count, $log)
}

使い方は次のとおりです。

  1. 最初の5行を書き換えます。$dir には、エクスプローラーで対象のフォルダを開き、アドレス欄に出るパスを入れます。$apply は $false のままにします
  2. PowerShellにコード全体を貼り付けて、Enterキーを押します。変更前と変更後の一覧が出るだけで、ファイルは変わりません
  3. 一覧を見て問題なければ、$apply = $true にして、もう一度貼り付けます。元の名前の記録が、デスクトップの rename_log_日時.csv に残ります

確認だけのときの表示の例です(「商品 (1)」から「商品 (3)」の3件)。

Old          New
---          ---
商品 (1).jpg 商品_001.jpg
商品 (2).jpg 商品_002.jpg
商品 (3).jpg 商品_003.jpg
確認だけです。変更するときは $apply = $true にして、もう一度貼り付けます。

戻したいときは、次のコードを貼り付けます。$log には、デスクトップに残った記録のファイル名を入れます。名前を変えたあとに、ほかのファイルを同じフォルダへ足したり、名前を変えたりすると、うまく戻せないことがあります。記録のファイルは消さないでください。

$dir = 'C:\Users\あなた\Pictures\商品'
$log = "$env:USERPROFILE\Desktop\rename_log_20261001_120000.csv"
& {
  $rows = Import-Csv $log
  $rows | ForEach-Object { Rename-Item -LiteralPath (Join-Path $dir $_.New) -NewName ('~tmp_' + $_.New) }
  $rows | ForEach-Object { Rename-Item -LiteralPath (Join-Path $dir ('~tmp_' + $_.New)) -NewName $_.Old }
  Write-Host ("{0} 件を元の名前に戻しました。" -f $rows.Count)
}

このスクリプトは、名前を2回に分けて変えます。途中で止まると「~tmp_」で始まる名前が残ることがあります。その場合は、「~tmp_」を取った名前が元の名前です。

試験の結果です。Windows PowerShell 5.1で、10件、50件、100件、1,000件の「商品 (n).jpg」を001の形にして、元に戻しました。すべて元の番号どおりになり、戻すと元の名前と中身に一致しました。かっこ [ ]、&、$、#、%、全角スペースを含む名前や、大文字の拡張子(JPG)も、同じ結果でした。別のファイルと同じ名前になる場合は、何も変更せずに止まりました。同じフォルダで2回実行しても、2回目は何も変わりません。コンソールに貼り付けた場合でも、同じ結果でした。

書式を覚えず、実行前に止めてほしいなら、RenameFlow

ここまでの方法は、すべて無料です。PowerRenameで足りるなら、ほかのツールは要りません。

RenameFlowは、ZEN AI LABが作った自社ツールです。文字の追加・置換・削除・連番の4つの方法を、画面で選んで使います。変更前にプレビューを見て、同じ名前があると実行前に止まります。拡張子は変えず、ファイルの中身も変えません。連番は「入れた名前_001」の形で、3桁に固定です。

向いているのは、PowerRenameの書式を覚えたくない人、同じ形のファイル名を何度もそろえる人です。向かないのは、次の人です。

  • 番号の順番を自分で決めたい(番号は名前の自然順で振られます)
  • 撮影日やファイルの作成日で名前を付けたい
  • 名前を変えたあとに、元に戻したい(戻す機能はありません)
  • Windows 10で使いたい(Windows 10の実機での確認は、終わっていません)

無料版は、一度に読み込めるファイルが10件までです。100件の作業には使えません。件数が無制限の有料版は、noteで300円(2026年10月1日に確認)で買えます。無料版は、LINE公式アカウントを友だち追加すると受け取れます。詳しい機能は、RenameFlowの製品ページにあります。

出品の写真を整えたら、次は値段です。売り切れの値段から相場を出す手順はメルカリの相場の調べ方へ。

ZEN AI LABが確かめたことと、まだ確かめられていないこと

確かめたことは、次のとおりです。

  • 場所と日付:2026年10月1日、Windows 11 Pro(10.0.26200)、CPUはIntel Core i5-8400
  • 使ったファイル:測定のために作った、1件5KBほどのダミーのJPG。中身は乱数
  • 動かした方法:Windows PowerShell 5.1で、パイプで渡して名前を変える書き方、数字を桁そろえしてから並べた書き方、cmdの for /L、上のスクリプト。RenameFlow v1.0.0は、画面のプログラムを自動で操作して動かしました。F2とPowerRename(PowerToys 0.101.2362.0)は、同じ日の夜に、エクスプローラーの画面を自動で操作して動かしました
  • F2:9件で、番号の始まりと、Ctrl+Zで戻ることを確かめました。番号の始まりは、名前の降順で表示した状態で、Shiftキーでの選び方を変えて試しました
  • PowerRename:10件、12件、50件、100件の連番と、Ctrl+Zで戻ることを確かめました。100件では、適用ボタンを押してから全件が変わるまで1.2秒、Ctrl+Zで戻るまで0.4秒でした(自動操作で1回だけ測った値で、ほかの方法の時間とは比べられません)。かっこの名前、一部の置き換え、同じ名前がある場合、拡張子が消える設定も試しました
  • RenameFlowで10件、50件、100件、1,000件、5,000件を連番にした結果は、すべて元の番号どおりで、中身も一致しました
  • 処理時間:数字を桁そろえしてから並べる書き方は、PowerShellの起動を含めて、100件で0.743秒、5,000件で10.264秒でした。RenameFlowは、実行する部分だけで100件が0.072秒、5,000件が3.416秒でした。測り方が違うので、速さの比べには使えません。人が操作する時間は測っていません

最初に試した書き方は、次のコードです。

$i=1
Get-ChildItem -LiteralPath $dir -File | ForEach-Object {
  $n = '商品_{0:000}{1}' -f $i, $_.Extension
  Rename-Item -LiteralPath $_.FullName -NewName $n
  $i++
}

この書き方では、50件のフォルダで名前の変更が1,049回起き、100件では1,099回起きました。

まだ確かめられていないことは、次のとおりです。

  • F2とPowerRenameの確認は、Windows 11の1台で、9〜100件のダミーのJPGだけです。名前を昇順で表示したときのF2のShiftキーでの選び方、日付順などほかの並び、PowerRenameの元に戻すをサインアウトや再起動のあとにする場合は試していません。初めて使う人が迷うかどうかは、人では試していません
  • 確認つきのスクリプトが、途中で止まったときの動きは試していません
  • RenameFlowの無料版は、配布されている無料版のEXEを使わず、同じ画面を無料版の設定にして動かしました
  • PowerShell 7、Windows 10、ネットワーク上の共有フォルダ、OneDriveの「オンラインのみ」のファイル、ほかのアプリで開いているファイルは試していません
  • 名前が1000番台になる理由は、新しい名前の並びを変える実験で絞り込んだ範囲です。2026年11月6日に、元の名前の長さを変えて同じ書き方を試すと、短い名前では30件まで起きず35件から起き、長い名前(40字・120字)では20件でも名前の変更が二重に起きました。起きるかどうかは、件数だけでなく元の名前の長さでも変わります。フォルダの一覧を少しずつ読み込む途中で、名前を変えたファイルがあとの読み込み分に入るためと考えられますが、PowerShellの内部のコードまでは見ていません

まとめ

F2で足りるのは「名前 (1)」の形でよいときです。001やかっこなしならPowerRenameで、操作はこちらの記事にあります。次の順で進めてください。

  1. 対象のフォルダを、フォルダごとコピーします
  2. コピーの中のファイルを10件だけ残し、F2で名前を変えて、形を確かめます
  3. 「(1)」の形で足りなければ、PowerRenameで入力してプレビューを見るだけにするか、上のスクリプトを $apply = $false のまま試します。どちらも、実行するまでファイルは変わりません