コマンドプロンプトでワイルドカードに想定外のものがヒットする

残念ながら締め切りになってしまってOkwaveには回答できませんでした。

MS-DOSワイルドカードの扱いについて 質問者:treelock


Windows 7環境で、MS-DOSのバッチファイルを作っています。
MS-DOS上でのワイルドカードの扱いに疑問がわいたので質問させてください。

C:\直下に
TEST - 01、TEST - 02、…、TEST - 12
というディレクトリを作ったのですが、
dir *04*
のコマンドで
TEST - 04
TEST - 09
の両方がヒットしてしまいます。

TEST - 04のみヒットすることを期待したのですが、09のほうまでヒットするのはなぜでしょうか。



以下、テキスト貼り付けですが、画面のコピーです。
C:\>dir *04*
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は ****-**** です

C:\ のディレクト

2013/08/03 22:40

TEST - 09 2013/08/03 22:39 TEST - 04 0 個のファイル 0 バイト

MS-DOSのワイルドカードの扱いについて - その他(Windows) 解決済み| 【OKWAVE】

一番わかりやすいのがこの例。

C:\Users\xxx>cd \

C:\>dir *1
 ドライブ C のボリューム ラベルは ABCDEFG004 です
 ボリューム シリアル番号は 1234-ABCD です

 C:\ のディレクトリ

2013/07/20  13:21    <DIR>          Program Files
               0 個のファイル                   0 バイト

ですかね。それで答えは dir /x ってやるとわかると思います。

2013/07/20  13:21    <DIR>          PROGRA~1     Program Files

8.3型式のファイル名にはまらない(文字数や空白が入ってる)場合に、8.3形式のファイルが自動的に割り当てられるんです。
短いファイル名とも言われます。ワイルドカードはこれにも引っかかるんですね。