- ベストアンサー
MS-DOSのワイルドカードの扱いについて
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 <DIR> TEST - 09 2013/08/03 22:39 <DIR> TEST - 04 0 個のファイル 0 バイト
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>dir *04* >TEST - 04のみヒットすることを期待したのですが、09のほうまでヒットするのはなぜでしょうか。 バグかも知れません。 目的としては"TEST - 01"~"TEST - 12"の中から"TEST - 04"を抽出して表示することですから末尾の"*"は余分な条件です。 dir *04 では正常に"TEST - 04"のみヒットします。 コマンドの動作特性を勘案して適切な記述をしてください。
その他の回答 (2)
- bunjii
- ベストアンサー率43% (3589/8249)
>私は前方一致と後方一致で二回検索する方法しか思い当たりませんが、ほかに良い方法はございますでしょうか。 目的に合えば良いんじゃないでしょうか。 MS-DOSのコマンドを駆使したのは20年ほど前のことなので殆ど覚えていません。 MS-DOSコマンドでもループ処理ができたと思います。 目的のディレクトリから順次フォルダ名を読み込んで処理を判定する手法が有ったように思いますのでコマンド一覧から動作を確認して利用されると良いでしょう。 尚、別の手法として、C++等でショートプログラムを書かれるのも考え易い方法ではないでしょうか?
お礼
ご回答、ありがとうございます。 仰られているとおり、コマンド一覧から動作を確認してみようと思います。 また、ショートプログラムも検討してみます。 最後まで、お付き合いくださって、ありがとうございました。
- bunjii
- ベストアンサー率43% (3589/8249)
>必ず末尾にあるとは限らないため、部分一致で検索することが要件となっています。 私はあなたのバッチファイル作成について要件を知る必要が無く、しかも、あなたの思惑通りに動作しないことについても関知しません。 回答に有りますように「バグの可能性」と「このような応答である」ことの情報を提供しただけです。 あなたが求める応答が得られるような記述をご自身で考えてください。 ワイルドカードは * に限らず ? も使えますのでディレクトリ構造に合った記述方法を考えてください。
お礼
ご回答、ありがとうございます。 >私はあなたのバッチファイル作成について要件を知る必要が無く、しかも、あなたの思惑通りに動作しない >ことについても関知しません。 こちらについて、仰られる通りです。 先ほどの回答内容について、私の説明が不足しており、申し訳ございません。 質問内容には記載しておりませんでしたが、回答したとおり、中間一致で検索したいと考えております。 その場合、私は前方一致と後方一致で二回検索する方法しか思い当たりませんが、ほかに良い方法はございますでしょうか。
補足
>その場合、私は前方一致と後方一致で二回検索する方法しか思い当たりませんが、 すみません、今、回答を見ていて気がついたのですが、前方一致と後方一致で二回検索しても中間一致検索は実現できませんね。こちらは取り消します。
お礼
ご回答、ありがとうございます。 今回は、テストデータなので、分かりやすくする為、末尾にナンバーが入っているのですが、必ず末尾にあるとは限らないため、部分一致で検索することが要件となっています。