同じようなファイル名で一部が違っているような場合、これらのファイルを一度に操作したいことはないだろうか。実は、ワイルドカード文字を使うと一度に処理できることがある。ただ、使い方を間違えると大変なことになることも……。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
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]
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]
事前の説明が長くなったが、このワイルドカード文字で今回のミッションを解決していこう。
まず、日付部分(「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]
と、ここまで説明をしておいて大変恐縮だが、実際には前述のような例ばかりでなく、ワイルドカード文字がイメージ通りに一致せず、とんでもない結果を招いてしまうケースも多い。分かりやすい例は次のようなものだ。
フォルダ内に以下の2つのファイルがあったとしよう。
企画会議議事録.doc
営業会議議事録.docx
このときdirコマンドに「*.doc」と指定すると、前述の説明しかなければ「企画会議議事録.doc」のみに一致しそうだが、実際には両方に一致してしまう。
この奇妙な振る舞いには歴史的な背景が絡んでいる。
ワイルドカード文字は、まだ元号が昭和だった昔、Windows OSの前身となる「MS-DOS」で使われていたものが現代に至るまで脈々と受け継がれている。MS-DOSではファイル名の制限が現在より厳しく、ベース名8文字以下、拡張子3文字以下でしか命名が許されなかった。いわゆる「8.3形式」と呼ばれる命名規則だ(さらに、スペースなど幾つかの文字種に使用制限があり、大文字小文字の区別もなかった)。8.3形式のファイル名とは次のようなものだ。
Copyright© Digital Advantage Corp. All Rights Reserved.