連載
» 2021年09月24日 05時00分 公開

甘くも危険なワイルドカードを使いこなすマウスのいらないコマンドプロンプトの世界

同じようなファイル名で一部が違っているような場合、これらのファイルを一度に操作したいことはないだろうか。実は、ワイルドカード文字を使うと一度に処理できることがある。ただ、使い方を間違えると大変なことになることも……。

[竹内充彦,著]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

そんなあいまいな条件でファイルを探せって? そんなあいまいな条件でファイルを探せって?
ファイル名があいまいだったり、同じようなファイル名で一部が違っていたりする場合、これらのファイルを検索、操作する際にワイルドカード文字を使うと一度に処理できることがある。ただ、思ったように使えないことも……。何で不思議なことになるのか、ワイルドカードの使い方を紹介しよう。

大量のファイルの中から特定パターンを持つファイル名だけを指定する強い味方

 Microsoft WordやMicrosoft Excelを使っていて、[ファイル名を付けて保存]とか、既存のファイルを[開く]といった作業を行うときに、[保存]や[開く]ダイアログが表示されるが、そのとき気になる表示がある。

[ファイルを開く]ダイアログなどにある「*」ってどんな意味 [ファイルを開く]ダイアログなどにある「*」ってどんな意味
Microsoft WordやMicrosoft Excelでも「*」の文字を見かけることがある。この画面でユーザーが直接「*」を指定することはないのだが、この「*」の意味って何?

 このダイアログで表示される「*.docx」とか「*.xlsx」の「*」という表記は何か? 知っている人には説明の必要もないが、これはワイルドカード文字(Wildcard Character)というものだ。世界中で遊ばれている某定番カードゲームに、どの色や数字としても使える超便利な札としてワイルドカードが含まれているが、Windows OSのワイルドカード文字も、あれに負けず劣らず便利なものだ(ただし使い方を間違えなければの話)。

【今回のミッション】

 上司がまた、とんでもない難題を持ちかけてきた。

 「緊急事態だ。先ほど、部長から『昨年の会議で君に頼んでおいた例の件どうなっている?』と聞かれて『バッチリです』と即答してしまったんだが、頼まれた件が何だったか思い出せないんだよ。そもそも何の会議だったのだか……。部長が出席していたから、定例部会やチームミーティングではないはず。いつ頃かも、よく覚えてないんだよなぁ。確か昨年の、10日とか20日とか30日とか切りのいい日付だった気がするんだが……。とにかく該当する会議の議事録を探してよ」

 なぜ、その場で「何の件だったのか」を部長に聞き返さないのか? 自分は、こんな上司の下で働いていて大丈夫なのかという不安はさておき、問題を整理しよう。

 うちの会社の議事録は、Microsoft Wordで記述されていて、ファイル名は必ず「YYMMDD_〇〇〇〇.docx」という形式になっている。YYは西暦の下2桁で「20」や「21」、MMは月で「01」〜「12」、DDは日にちで「01」〜「31」が入る。〇〇〇〇は会議名で「営業会議」「企画会議」「定例部会」「チームMTG」などが入り、ファイル名を見ただけで、いつのどの会議なのかが簡単に分かるようにしてある。例えば、2021年5月1日の企画会議ならば、「210501_企画会議.docx」というファイル名になる。

 しかし、几帳面(きちょうめん)なのはそこまでで、サブフォルダは作らず、全て「議事録」フォルダに突っ込まれている。さて、膨大な数のファイルから当該ファイルをピックアップするには、どうする?


 このようなファイル名の持ついろいろなパターンを利用して、大量のファイルの中から目的のファイルだけを指定できるのがワイルドカード文字だ。

あいまいなファイル指定を可能にする超便利文字

 詳しい説明は後回しにするが、この場合はワイルドカード文字を使うと簡単に作業が完了する。カレントフォルダが「議事録」で、受け渡し用のUSBメモリがD:ドライブに割り当てられているとして、copyを使った次のコマンドを実行すればよい(コマンドの意味は後述)。

copy 20*0_*会議* d:[Enter]


ワイルドカード文字を使ったコピー

コマンドを1行実行するだけで解決(1) コマンドを1行実行するだけで解決(1)
フォルダにこのように一定のルールで保存されているのであれば、ワイルドカード文字を使って、特定の文字を含むファイルのみを抽出できる。
コマンドを1行実行するだけで解決(2) コマンドを1行実行するだけで解決(2)
特定の文字のみを指定し、後はワイルドカード文字を使うことで、その文字を含むファイルのみをコピーすることができる。

 Windows OSではファイルやフォルダを指定する際に、ファイル名やフォルダ名の一部、あるいは全部が明確でなかったり、複数の候補があったりするときに、その部分をあいまいなまま指定できる特殊な代替文字が使える。これがワイルドカード文字だ。ワイルドカード文字には次の2種類がある。

文字 意味
? 指定した場所の任意の1文字と一致する。文字数が分かっているが文字種が分からないときに、文字数分の置き換えに使うと便利
* 任意の数の任意の文字と一致する。文字数も文字種も定かでないときに使うと便利だが、使い方を間違えると意図したファイルを指定できないので注意
ワイルドカード文字の種類と意味

 例えば、「a?b」と指定すると「atb」や「akb」などに一致する。「a*b」と指定すると「atb」や「akb」はもちろんだが、「ab」「absorb」「accidental flashmob」にも一致する。注意が必要なのは、「?」は指定場所に1文字があるという前提だが、「*」は任意の文字数なので「ab」のように0文字の場合も一致する点だ。

 なお、例では半角文字ばかり紹介しているが、ひらがなや漢字といった全角文字にも一致するので、半角英数とかな漢字(全角)のファイル名にも使える。

 ワイルドカード文字は、コマンドラインから実行するコマンドの多くで、ファイル名を指定する部分に利用可能だ。例えば、dir、copy、ren、del、find、fcなど、本連載でこれまでに紹介したコマンドでも利用できる。

 「exam」で始まる複数のテキストファイルとanswer.txtを比較するなら次のように使う。

fc exam*.txt answer.txt[Enter]


ワイルドカード文字を使って「exam」で始まる複数のテキストファイルとanswer.txtを比較する

ミッションクリアのためのワイルドカード文字はこれだ!

 事前の説明が長くなったが、このワイルドカード文字で今回のミッションを解決していこう。

 まず、日付部分(「YYMMDD_」)だけを考えよう。「昨年(2020年)」ということなのでファイル名の先頭は西暦の末尾「20」、月の2桁は不明で、日にちは「10」か「20」か「30」、つまりどのケースでも末尾は「0」ということだ。担当者が日付の後に「_」を入れているので、これを確定している部分として指定する。つまり日付部分は「20???0_」または「20*0_」と指定できる。

 「とにかく会議だった」ということで、ファイル名に「〇〇会議」という名称が入っているはずなので、ここは会議名全体が何文字か分からないので「*会議」とする。

 拡張子は「.docx」なので、そのまま指定するなら「20*0_*会議.docx」だ。フォルダ内には拡張子「.docx」のファイルしかないという前提で「20*0_*会議*」のように記述すれば、入力文字数が減らせる。カレントフォルダからUSBメモリのD:ドライブにコピーするなら以下のコマンドを実行すればいい。

copy 20*0_*会議* d:[Enter]


2020年の10日/20日/30日のファイル名に「会議」が入っているファイルをD:ドライブにコピーするコマンド

悪いのはワイルドカード文字じゃない!? 周囲の環境のせいだ

 と、ここまで説明をしておいて大変恐縮だが、実際には前述のような例ばかりでなく、ワイルドカード文字がイメージ通りに一致せず、とんでもない結果を招いてしまうケースも多い。分かりやすい例は次のようなものだ。

 フォルダ内に以下の2つのファイルがあったとしよう。

企画会議議事録.doc
営業会議議事録.docx


フォルダ内にある2つのファイル

 このときdirコマンドに「*.doc」と指定すると、前述の説明しかなければ「企画会議議事録.doc」のみに一致しそうだが、実際には両方に一致してしまう。

ワイルドカード文字がイメージと異なる動作をする例 ワイルドカード文字がイメージと異なる動作をする例
拡張子「.doc」のファイルのみを指定したつもりが「.docx」のファイルにも一致してしまう。

 この奇妙な振る舞いには歴史的な背景が絡んでいる。

 ワイルドカード文字は、まだ元号が昭和だった昔、Windows OSの前身となる「MS-DOS」で使われていたものが現代に至るまで脈々と受け継がれている。MS-DOSではファイル名の制限が現在より厳しく、ベース名8文字以下、拡張子3文字以下でしか命名が許されなかった。いわゆる「8.3形式」と呼ばれる命名規則だ(さらに、スペースなど幾つかの文字種に使用制限があり、大文字小文字の区別もなかった)。8.3形式のファイル名とは次のようなものだ。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。