ファイル名の変更
ファイル名の変更には rename(短縮形は ren)コマンドを使い、rename 現在の名前 新しい名前 の形式で指定します。
このページでは、1 件のファイル名変更から、ワイルドカードで拡張子をまとめて変更する方法、for ループで全ファイルの先頭に文字列を追加する方法までを、具体例つきで紹介します。バッチファイルでも同じ書き方で実行できます。
使用するコマンド
ファイル名の変更には、renameコマンドを使用します。
省略してrenと入力しても同様の結果を得ることができます。
1 つ目の引数として現在のファイル名、2 つ目の引数として変更したいファイル名を指定します。フォルダ名の変更にも使えます。
rename では、新しい名前にドライブやパスを指定できません。別フォルダへ移したい場合は move
を使います。
コマンドプロンプトから実行
カレントディレクトリにある「before.txt」というファイルを「after.txt」にリネームするサンプルです。
バッチファイルから実行
@echo off
setlocal
set "FOLDER=%USERPROFILE%\Documents"
rename "%FOLDER%\before.txt" "after.txt"
endlocal
exit /b
新しい名前のファイルが既に存在する場合や、ファイルが他のアプリで開かれている場合は、「重複するファイル名か、ファイルが見つかりません。」などのエラーになり、リネームされません。
まとめてリネームを行う
renameコマンドでは、1 つ目、2 つ目の引数それぞれでワイルドカードの指定が可能です。
これを利用して、複数のファイルをまとめてリネームすることができます。
少し複雑なため、いくつか例を紹介します。
ワイルドカードを使ったリネーム
以下のコマンドは、「disposable」フォルダに保存されているすべての.txtファイルの拡張子を.htmlに変更するサンプルです。
2 つ目の引数の*には、1 つ目の引数でマッチしたファイル名がそのまま引き継がれます。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
forループを使ったリネーム
複数のファイルの先頭に決まった文字列を追加したい場合などは、ワイルドカードだけでは表現できないため、forループを使って実現します。
以下のコマンドは、カレントディレクトリに保存されている全てのファイルの先頭に「renamed_」を追加するサンプルです。
フォルダは対象外となる点に注意してください。
上記はコマンドプロンプトに直接入力する場合の書き方です。バッチファイルに記述する場合は、変数を%%fのように%を 2 つ重ねて書く必要があります。
上記のコードにおける、renameコマンドの引数として指定している"%f"と"renamed_%f"は、いずれもダブルクォートなしでも実行することができます。
しかし、ファイル名にスペースが含まれている場合は、ダブルクォートを付けないと構文エラーとなりリネームは実行されません。
対象となるファイルにスペースが含まれている可能性を考慮し、ダブルクォートを付けることを推奨します。
for %f in (*)は、リネームの実行中にもフォルダ内の一覧を読み取るため、すでにリネームしたファイルが再び処理され、「renamed_renamed_…」のような名前になることがあります。確実に 1 回ずつ処理したい場合は、先にdirで一覧を確定させるfor /f "delims=" %f in ('dir /b /a-d') do rename "%f" "renamed_%f"の形式を使ってください。
例として、以下のようなフォルダ構成を想定します。
C:\test
│
└─disposable
sample01.txt
sample02.txt
sample03.txt
sample04.txt
C:\test\disposableをカレントディレクトリとして、上記のコマンドを実行すると、以下のように出力されます。
フォルダ構成を確認すると、以下のようにファイル名が変更されていることが分かります。
C:\test
│
└─disposable
renamed_sample01.txt
renamed_sample02.txt
renamed_sample03.txt
renamed_sample04.txt