Windowsフォルダ内ファイル名をcmdで一括変更する方法
ある一定の規則に沿ったファイル群は、コマンドラインソフト(cmd)を使って一括で名前変換する事ができます。
コマンドラインソフトはどこからでも起動できますが、カレントディレクトリに移動しておけば引数1にパス名を入れる必要が無くなります。
ワイルドカードの「*」や「?」を使って、特定の名称部分を変更しつつそこ以外はそのまま継承させる事ができます。
ファイルを一定ルールで一括変更したい
本記事ではWindowsフォルダ内にある複数のファイル名を、特定の規則に基づいて一括変更する方法についてご紹介します。
ファイルが1つや2つ程度しか無いのなら、「名前変更」でそれぞれ編集していけば問題はないでしょう。
しかし数十個のファイルを全て一括変更するとなると、手間が掛かりますよね。
そんな時は、コマンドラインソフトを使って一気に変更する事ができます。
Excelファイルの日付を変更する
例えば下記の様に並んでいるExcelファイルがあるとします。
これらのファイルの日付部分を、2022年から2023年に変更する事が目的です。
これらを一つずつやるとなると、数が多いと大変ですよね。
それではWindowsに標準搭載されているコマンドラインソフト(cmd)を使って、一括変更したいと思います。
フォルダを選択してcmdを起動
対象のフォルダをアクティブにした状態にしましょう。
その上で、キーボードの「Alt+D」キーを同時押しします。
すると、フォルダ上部のアドレスバーが選択された状態になります。
Alt+Dコマンドを押しても選択されない場合、フォルダ内の余白部分を一度クリックしておきましょう。
もしくは、アドレスバー一番左のフォルダマークをクリックしても選択された状態になります。
cmd起動
アドレスバーが選択された状態で、キーボードで「cmd」と入力してEnterを押しましょう。
するとコマンドラインソフトが立ち上がります。
ファイル名の一括変更方法
cmd上にこれから紹介するコードを1行入れるだけで、全てのファイルの名前が一気に変更される訳です。
一括変更のコマンド
ここで以下の様にコマンドを入れます。
REN 2022* 2023*
これでEnterをしてみましょう。
すると2022年で始まっていたファイル名が、全て2023年の名前に切り替わっています。
一括変更の対象となる条件
今回の一括変更は、ファイル名の冒頭が"2022"で始まる事が条件です。
ファイル名が"2022"で始まらないファイルについては、今回の変更対象には入りません。
ファイル名が特定の規則に基づいていれば、こういった一括変更が可能になります。
ワイルドカード(正規表現)
上記のcmdコマンドで使った記号「*」は、ワイルドカードと呼ばれる「正規表現」です。
「2022*」は、「先頭が2022で始まるファイル全て」を指しています。
「2023*」は、先頭が2023に変更される以外は元の名前を継承する意味です。
REN(Rename)コマンド
今回cmdで使ったRENコマンドについて、簡単に紹介しておきたいと思います。
対象のファイルの名前を変更する命令が、RENコマンドです。
REN ファイル名1 ファイル名2 ※半角スペースで並べます。
「REN」でも「RENAME」でも同じコマンドになります。
RENコマンドの引数として、変更前のファイル名と変更後のファイル名を指定します。
上記は「ファイル名1」を「ファイル名2」に変更するという命令になります。
コマンド実行例
カレントフォルダの中にあるindex.txtを、index.htmlに変更する場合を考えてみます。
ren index.txt index.html
これでEnterを押して実行すると、index.txtがindex.htmlに変更される訳ですね。
この場合、元の名前が「index.txt」でない限り変換されません。
引数1に完全一致するものだけが変わる事になります。
パスを指定して実行できる
最初に紹介したExcelの一括変更は、開いているフォルダ上でcmdを起動させていました。
cmdは本来、別の場所からでもコマンド実行する事ができます。
別の場所からでも実行可能
例えばデスクトップ上でcmdを起動して、index.txtを変更する事ができます。
しかしその場合、先ほどのRENコマンドが少し長くなります。
引数1に対し「それがあるパスの位置」を指定する必要があるためです。
斜め線は\マークを示しています。
REN ドライブ:\パス\ファイル名1 ファイル名2
この様に、RENコマンドの引数1はパス付きで指定する事ができます。
ディレクトリまで移動して起動
このパスを入れるのは正直面倒なので、カレントフォルダ上でcmdを起動した訳ですね。
慣れていれば、どこでもcmdを起動して指定位置のファイルを操作する事ができます。
なお引数2にはパスをつける事はできません。ファイル名のみとなります。
ワイルドカードを使った一括変更
先程のExcelの例では、RENコマンドの1番・2番の引数にそれぞれワイルドカードが使用されていました。
ワイルドカードは様々なケースで活用されます。
引数1に*が使われる場合
引数1に*が使われるのは、変更対象を完全一致で指定する事ができない場合です。
共通となる部分を特定し、それ以外は*で代用してターゲットを絞る事になります。
ren *.txt index.html
上記のコマンドは、「末尾が.txtのファイル」を全て「index.html」に切り替えます。
仮にフォルダ内にabout.txtがあれば、index.htmlに変更されてしまいます。
うっかり他のファイルの名前を変えてしまわない様に注意する必要がありますね。
引数2に*が使われる場合
引数2に*を使う事もできます。
ren index.txt *.html
上記の場合、index.txtあれば全て「index.html」に切り替わります。
引数2で同じindexをつけなくても、「*」をつければ継承される意味になりますね。
両方に使われる場合
最後に引数1と2両方で使う場合です。
拡張子.txtファイルであれば、どんな名前でもそのまま.htmlに変更する命令を実行してみます。
ren *.txt *.html
上記のRENコマンドを実行すると、.txtのファイルが全て.htmlに変更されます。
どのようなファイル名がついていようと、そこはそのまま継承されます。
この様に拡張子指定は、一括変換が非常にしやすいと言えるでしょう。
様々な位置に使える
冒頭のExcelファイルの名前変更は、引数1が「2022*」でした。
これはファイルの名前が「2022から始まる全ファイル」という意味になるのですね。
2022の部分を2023に変更しますが、そこ以外は何も変わらず継承される事になります。
ワイルドカードを対象の「前」や「末尾」「真ん中」につける事で、ある程度対象を絞る事ができる訳です。
ワイルドカードの種類
ワイルドカードの代表である「*」と「?」について簡単に紹介しておきましょう。
ワイルドカード「*」
ワイルドカードの「*」は任意の長さの文字列を表すワイルドカードです。
例えば、*.htmlは「任意の文字列のうしろに.htmlがつくファイル名」の事になります。
ここでの任意の文字列は、何文字であっても対象に含まれます。
*の対象は0~∞
例えばsitemap*.xmlと記述した場合、許容範囲がかなり広いです。
sitemap10.xml…〇
sitemap_blog.xml…〇
sitemap.xml…〇
sitemap55.html…×
3番目は「sitemap」の後ろに何もついていないのですが、*は0文字もカウントされますので一致します。
4番目は「sitemap」+2文字ですが、拡張子が「.html」なので一致しません。
かなり広い範囲をターゲットにする事ができますね。
ワイルドカード「?」
もう一つのワイルドカードである「?」は、任意の1文字に一致するワイルドカードです。
「*」と違いルールが厳密になります。
?1個が1文字
例えばsitemap??.xmlと記述した場合は、2文字しか許されません。
sitemap+「任意の1文字」+「任意の1文字」+.xmlに一致するファイル名が対象になります。
sitemap10.xml…〇
sitemapbb.xml…〇
sitemap200.xml…×
sitemap55.html…×
上記の1番目と2番目のファイル名は2文字ですから一致しますよね。
3番目は「sitemap」+3文字+「.xml」となっているので一致しません。
4番目は「sitemap」+2文字ですが、拡張子が「.html」なので一致しません。
このように「?」は、文字数を絞って一致するファイル名を指定したい場合に使われます。