ワイルドカード
ファイルを 1 つずつ指定する代わりに、*.txt のようにワイルドカードを使うと、条件に合うファイルをまとめて指定できます。dir、copy、del、ren など、多くのコマンドで使える基本テクニックです。
この記事では、* と ? の意味、コマンドごとの使い方、そして初心者がつまずきやすい注意点を解説します。
結論
| 記号 | 意味 | 例 |
|---|---|---|
* | 0 文字以上の任意の文字列 | *.txt(すべての txt ファイル) |
? | 任意の 1 文字 | report?.txt(report1.txt、reportA.txt など) |
- ワイルドカードを展開するのはコマンド自身です。コマンドプロンプトは展開しません。
- フォルダ名の途中(
C:\Us*\Documentsなど)には使えません。 del *.docのような削除では、意図しないファイルまで一致する場合があります。先にdirで確認しましょう。
ワイルドカードの基本
*(アスタリスク)
* は、0 文字以上の任意の文字列に一致します。
dir *.txt
dir report*
dir *log*
?(クエスチョンマーク)
? は、任意の 1 文字に一致します。文字数を限定したいときに便利です。
dir data?.csv

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
data10.csv は ? が 1 文字分しかないため一致しません。2 文字なら data??.csv と書きます。なお、次の Info のとおり、data?.csv は data.csv にも一致します。
名前部分の末尾に置いた ? は、「1 文字、または 0 文字」に一致します。たとえば dir ab? は abc だけでなく ab にも一致します。途中に置いた ? は、必ず 1 文字に一致します。
*.* と *.
| パターン | 一致するもの |
|---|---|
*.* | すべてのファイル(拡張子なしも含む) |
*. | 拡張子のないファイル |
* | すべてのファイル |
*.* は「拡張子のあるファイル」ではなく、拡張子のないファイルも含むすべてのファイルを指します。
コマンドごとの使用例
dir:一覧表示と検索
dir /s /b *.log
詳しくは
を参照してください。copy / del / move:まとめて操作
copy *.txt backup\
del *.tmp
move cache* archive\
パスに空白が含まれる場合は、ワイルドカードを含めてパス全体を引用符で囲みます。
del "C:\My Files\*.tmp"
ren:拡張子をまとめて変更
ren *.txt *.bak
ren では、変更後の名前にもワイルドカードを使い、元の名前の対応する部分を引き継げます。詳しくは
for:1 つずつ処理
for のかっこ内にワイルドカードを書くと、一致したファイルを 1 つずつ変数に受け取れます。
for %f in (*.txt) do @echo %f
上記はコマンドプロンプトに直接入力する例です。バッチファイル内では %f を %%f に書き換えてください。
フォルダを対象にする場合は for /d、サブフォルダまで再帰的に探す場合は for /r を使います。詳しくは
if exist:存在確認
if exist *.txt echo txt ファイルがあります
詳しくは
を参照してください。注意点
ワイルドカードを展開するのはコマンド自身
bash などと違い、コマンドプロンプトはワイルドカードを展開せず、そのままコマンドに渡します。
echo はワイルドカードを解釈しないため、文字列がそのまま表示されます。ワイルドカードが使えるかどうかは、コマンドごとに異なります。
| コマンド | ワイルドカード |
|---|---|
dir copy del move ren type | 使える |
for(かっこ内) | 使える |
where | 使える |
rmdir(rd) | 使えない(for /d と組み合わせる) |
cd | 使えない |
find | ファイル名には使えない(for と組み合わせる) |
findstr | 検索パターンは正規表現。ファイル名には使える |
フォルダ名の途中には使えない
dir C:\Us*\Documents
フォルダ名の途中でワイルドカードを使ってもパスとして解釈されません。サブフォルダを横断して探したい場合は、/s を使います。
dir /s /b C:\Users\*.docx
拡張子が長く一致してしまう(8.3 形式の短い名前)
ファイルシステムが 8.3 形式の短い名前を生成している環境では、拡張子が 4 文字以上のファイルにも一致することがあります。短い名前では拡張子が 3 文字に切り詰められるためです。
dir *.doc
del *.doc のように削除で使うと、.docx まで消えてしまう可能性があります。破壊的な操作の前には、同じパターンで dir を実行して対象を確認してください。
del や move を実行する前に、同じパターンで dir /b パターン を実行し、対象のファイルを必ず確認しましょう。del *.* はカレントフォルダ内のすべてのファイルを削除する(確認メッセージが表示されます)ため、特に注意が必要です。
フォルダの扱い
dir はパターンに一致するフォルダも表示しますが、del は一致したフォルダを削除しません(ファイルのみが対象です)。フォルダをワイルドカードで削除したい場合は、次のように for /d を使います。
for /d %d in (tmp*) do rd /s /q "%d"
バッチファイル内で使う場合は、ここでも %d を %%d に書き換えてください。
隠しファイル
dir や del は、隠しファイルやシステムファイルを既定では対象にしません。dir で表示するには /a オプションを付けます。
dir /a *.txt
del で隠しファイルも削除するには del /a *.tmp のように /a を付けます。
まとめ
| やりたいこと | 例 |
|---|---|
| 拡張子で絞り込む | dir *.txt |
| 先頭の文字列で絞り込む | dir report* |
| 1 文字だけ違うファイルを指定する | dir data?.csv |
| 拡張子のないファイルを探す | dir *. |
| サブフォルダも含めて探す | dir /s /b *.log |
| 1 つずつ処理する | for %f in (*.txt) do ... |
| 拡張子を一括変更する | ren *.txt *.bak |