大量のファイルの拡張子を変更したい場合は、コマンド・プロンプト上でrenコマンドを使うとよい。renコマンドでワイルドカード文字を指定すると、複数のファイルを対象に名前変更したり、ファイルの拡張子だけを変更したりできる。サブフォルダの中にあるファイルも処理したければ、forコマンドと組み合わせるとよい。
対象OS:Windows 2000/Windows XP/Windows Server 2003
例えば「〜.jpeg」という名前のファイルの拡張子だけを「〜.jpg」に変更する場合、ファイルの数が少なければエクスプローラで選択してから[F2]キーを押して(もしくはマウスでクリックしてからしばらく待つか、ポップアップ・メニューから[名前の変更]を選択する)、新しい名前に変更すればよいだろう。
だがファイルの数が非常に多かったり、複数のフォルダ中に分散して存在したりしている場合、いちいちエクスプローラで操作するのは非常に面倒である(関連記事参照)。
こんな場合は、スクリプトやコマンド・プロンプトを使えば、素早く簡単に済ませることができる。本TIPSでは、コマンド・プロンプト上のrenコマンドを使って、ファイルの拡張子をまとめて変更する方法を紹介する。
コマンド・プロンプト上でファイル名を変更するには、「ren」もしくは「rename」コマンドを使用する(どちらでも同じ)。renコマンドは、指定したファイルやフォルダの名前を変更するためのコマンドであり、一般的には次のように、「ren <変更前の名前> <変更後の名前>」というふうに利用する(ファイル名に空白などの特殊文字が含まれる場合は引用符で囲む)。
※これは、Sample.JPEGをSample.JPGに名前変更する例
C:\Data>ren Sample.JPEG Sample.JPG
この例では、ファイル名をSample.JPEGからSample.JPGに変更している。
だがこのように、ファイルのベース・ネーム部分(「Sample.JPEG」なら「Sample」の部分)は変えずに、拡張子の部分だけを変更するなら、renコマンドの第2引数にワイルドカード文字を利用することができる。
※これは、Sample.JPEGをSample.JPGに名前変更する例
C:\Data>ren Sample.JPEG *.JPG
第2引数にワイルドカード文字を指定すると、その部分は変更されずに元のまま維持される。この例だと、ベース・ネーム部分を*、拡張子を.JPGとしているので、これは結局、ファイルの拡張子だけを.JPEGから.JPGに変更するという意味になる。ファイルの拡張子だけなど、名前の一部だけを変更したい場合に便利である。
もし名前を変更したいファイルがたくさんあるのであれば、renコマンドの第1引数にもワイルドカード文字を指定することができる。こうすると、第1引数にマッチするファイルがすべて名前変更の対象となる。
※これは、*.JPEGにマッチするすべてのファイルを、〜.JPGに名前変更する例
C:\Data>ren *.JPEG *.JPG
※これは、Sample*.JPEGにマッチするファイルだけを、すべて〜.JPGに名前変更する例
C:\Data>ren Sample*.JPEG *.JPG
最初の例では*.JPEGというファイルをすべて〜.JPGに名前変更しているが、このフォルダ内に不要なファイルがないのであれば(すべて*.JPEGというファイルなら)、「ren *.* *.JPG」としてもよい。ファイル名の一部を入力する必要がないので、楽になる。
なお、この形式を利用する場合、第2引数にもワイルドカード文字を用いるようにしなければならない。そうでないと、複数のファイルがすべて同じ単一のファイル名に変更されることになるが(例:「ren *.JPEG output.JPG」)、これを実行すると、2つ目以降の名前変更の結果が衝突し、コマンドの実行が失敗する。
以上の例は、同一フォルダ(カレント・フォルダ)内のファイルを対象としていたが、ファイルが別のフォルダやサブフォルダ中にある場合は、第1引数でそのフォルダのパスも指定する。ただし第2引数では、フォルダのパスは指定してはいけない。以下、例を示そう。
次の例では、Folder1という名前のフォルダの下に、*.JPEGというファイルが存在するものとする。このフォルダの中のファイルをすべて*.JPGに変更するには、次のようなコマンドを実行する。
※Folder1内の*.JPEGをすべて〜.JPGに名前変更する例
C:\Data>ren Folder1\*.JPEG *.JPG
第2引数では、パス名(ここでは「Folder1\」)を指定していないことに注意していただきたい。次のようにすると、エラーとなる。
※これはエラー。第2引数にパスを指定してはいけない
C:\Data>ren Folder2\*.JPEG Folder2\*.JPG
コマンドの構文が誤っています。
なお、renコマンドはあくまでも名前変更しかできないので、場所を移動するような指定はエラーとなる。移動したければrenではなく、moveコマンドを利用する。
※これもエラー。リネーム先のファイルの場所が元とは異なる
C:\Data>ren Folder1\Sample1.JPEG Folder1\Sample2.JPG
コマンドの構文が誤っています。
さてそれでは、フォルダが複数ある場合はどうすればよいだろうか。いちいちフォルダ名を指定しながら、renコマンドを繰り返すのは非常に面倒である。そういう場合は、forコマンドと組み合わせるとよい。
forコマンドでフォルダ名(サブフォルダ名)を列挙するには、「for /d %変数名 (*) do コマンド列」とする(変数名は任意の英字1文字)。例えば次のコマンドを実行すると、フォルダ名の一覧が(echoコマンドで)表示される(変数名は「i」を使用)。
C:\Data>for /d %i in (*) do echo %i ……フォルダ名の表示
C:\Data>echo Folder1
Folder1 ……フォルダ名1の表示
C:\Data>echo Folder2
Folder2 ……フォルダ名2の表示
C:\Data>echo Folder3
Folder3 ……フォルダ名3の表示
フォルダの中にさらにサブフォルダがあり、階層的になっているなら、/rオプションも指定する。するとすべてのサブフォルダが列挙される。
C:\Data>for /r /d %i in (*) do echo %i
これでフォルダ名の列挙が完了するので、これをrenコマンドと組み合わせれば、サブフォルダにあるすべてのファイル名を名前変更できる。
C:\Data>for /r /d %i in (*) do ren %i\*.JPEG *.JPG
なお、ここではforコマンドでフォルダ名を列挙させているが、ファイル名を列挙させて個別にrenを実行することもできる。forコマンドから/dオプションを外すと、フォルダ名ではなく、ファイル名が変数にセットされる。
C:\Data>for /r %i in (*) do ren %i *.JPG
どのようなコマンドが実行されるか分かりづらい場合は、いきなりコマンドを実行するのではなく、echoコマンドでコマンド文字列を表示させて、確認、デバッグするとよいだろう。以上のコマンド列の「do」の直後に「echo」を入れ、次のようにする。
C:\Data>for /r %i in (*) do echo ren %i *.JPG
C:\Data>echo ren C:\Data\Sample1.JPEG *.JPG
ren C:\Data\Sample1.JPEG *.JPG ……表示されたコマンド
C:\Data>echo ren C:\Data\Sample2.JPEG *.JPG
ren C:\Data\Sample2.JPEG *.JPG ……表示されたコマンド
C:\Data>echo ren C:\Data\Sample3.JPEG *.JPG
ren C:\Data\Sample3.JPEG *.JPG ……表示されたコマンド
……(以下省略)……
すると、実行するべきコマンドの文字列が表示されるので、内容を確認しやすくなる。内容を確認後、echoを削除して、もう1度実行すればよい。
■関連記事(Windows Server Insider)
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.