[前の記事]« あるフォルダ内の全フォルダを削除するには
[次の記事]バッチファイルを直接起動すると無限ループしてしまう »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「EXIST」索引へ

if existでワイルドカード*.*は使えない?

1001.
existでワイルドカードは使えない?
2006年02月13日(月) 22時54分
koohee
●DOS/Windowsのバージョン↓
XP & 2003

exist を使ってファイルの存在チェックをする際にワイルドカードを使うとうまく動作してくれません。
ワイルドカードといっても「*.txt」のようにすればうまく動作するのですが、「*.*」とすると、常にtrueになってしまいます。

やりたいこととしては、特定のディレクトリに何かしらファイルがあればハンドリングしたいと思っています。

たとえば以下のようにしたいのですが・・・
if exist *.* ( echo [ある] ) else ( echo [ない] )
しかしながらこれではファイルもディレクトリも無い状態にもかかわらず、結果が「ある」になってしまいます。

ファイルの存在有無チェックで良い方法はないでしょうか?
1002.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 00時20分
じゃく
>●DOS/Windowsのバージョン↓
>XP & 2003
>
>exist を使ってファイルの存在チェックをする際にワイルドカードを使うとうまく動作してくれません。
>ワイルドカードといっても「*.txt」のようにすればうまく動作するのですが、「*.*」とすると、常にtrueになってしまいます。

こんばんは。
dir の出力から推測するに、.や..が該当しているのだと思います。(自信なし)


>やりたいこととしては、特定のディレクトリに何かしらファイルがあればハンドリングしたいと思っています。
>
>たとえば以下のようにしたいのですが・・・
>if exist *.* ( echo [ある] ) else ( echo [ない] )
>しかしながらこれではファイルもディレクトリも無い状態にもかかわらず、結果が「ある」になってしまいます。
>
>ファイルの存在有無チェックで良い方法はないでしょうか?

確認ですがファイルがない状態をチェックしたいのですね。
その際サブディレクトリの有無は無視していいのですか?
ファイルもサブディレクトリもない状態(ディレクトリ内が空)をチェックしたいのですか?
1005.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 04時08分
otn
>>●DOS/Windowsのバージョン↓
>>XP & 2003
>>
>>exist を使ってファイルの存在チェックをする際にワイルドカードを使うとうまく動作してくれません。
>>ワイルドカードといっても「*.txt」のようにすればうまく動作するのですが、「*.*」とすると、常にtrueになってしまいます。
>
>こんばんは。
>dir の出力から推測するに、.や..が該当しているのだと思います。(自信なし)

if exist *\NUL
if exist .\NUL
if exist ..\NUL
の結果比較からは違うようです。if exist * の動作は謎です。

>>やりたいこととしては、特定のディレクトリに何かしらファイルがあればハンドリングしたいと思っています。

. と .. 以外何も無いことを調べたければ、
set NANIKA=NASHI
for /f %%A in ('dir /a /b') do set NANIKA=ARI
でわかると思います。

>確認ですがファイルがない状態をチェックしたいのですね。
>その際サブディレクトリの有無は無視していいのですか?
>ファイルもサブディレクトリもない状態(ディレクトリ内が空)をチェックしたいのですか?

ディレクトリは無視してファイルのみチェックなら、短いのは、
dir /a-d >NUL 2>NUL && ありの処理
ですかね。

でも「あり」のときはどうせファイル名を調べるんだろうから、
for %%A in (*) do ....
でいいような。
1007.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 14時29分
koohee
>ディレクトリは無視してファイルのみチェックなら、短いのは、
>dir /a-d >NUL 2>NUL && ありの処理
>ですかね。

とりあえずサブディレクトリは無視して良いので上記コマンドを試したところ、期待通りの動きになりました。
otn様、ありがとうございました。

ただ、コマンドの意味が分からないのは嫌なので恐れずに質問してみます。

・「/a-d」 これは「/a:-d」と同じことでしょうか?
・「>NUL 2>NUL」 これはNULLデバイスにリダイレクト?する意味とは?。2>って?
・「&&」 なんでしょう?
恐らく初歩的な質問なのでしょうが・・・

1008.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 16時12分
じゃく
otnさんこんにちは。

>>こんばんは。
>>dir の出力から推測するに、.や..が該当しているのだと思います。(自信なし)
>
>if exist *\NUL
>if exist .\NUL
>if exist ..\NUL
>の結果比較からは違うようです。if exist * の動作は謎です。

そうですか。違ってますね。納得できる動作になりませんね。
if exist ..\NUL はルートディレクトリでも真になりました。訳がわかりません。

>
>>>やりたいこととしては、特定のディレクトリに何かしらファイルがあればハンドリングしたいと思っています。

>ディレクトリは無視してファイルのみチェックなら、短いのは、
>dir /a-d >NUL 2>NUL && ありの処理
>ですかね。
>
>でも「あり」のときはどうせファイル名を調べるんだろうから、
>for %%A in (*) do ....
>でいいような。

別解を考えていたので書き捨てしておきます。
for /F "tokens=1,2" %%a in ('dir') do @if
/%%b==/個のファイル if %%a GTR 0 echo ファイルありの処理 -- %%a files
1009.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 18時23分
otn
>>ディレクトリは無視してファイルのみチェックなら、短いのは、
>>dir /a-d >NUL 2>NUL && ありの処理
>>ですかね。
>
>とりあえずサブディレクトリは無視して良いので上記コマンドを試したところ、期待通りの動きになりました。
>otn様、ありがとうございました。
>
>ただ、コマンドの意味が分からないのは嫌なので恐れずに質問してみます。
>
>・「/a-d」 これは「/a:-d」と同じことでしょうか?

同じです。dir /? でも、 [/A[[:]属性]] と、: は省略可能と記されています。

>・「>NUL 2>NUL」 これはNULLデバイスにリダイレクト?する意味とは?。2>って?

「ファイルがみつかりません」というエラーメッセージは、>NULでは消えないので、2>NUL で消します。一般にエラーメッセージは2番に出るので、2> でリダイレクトします。

>・「&&」 なんでしょう?

 コマンド1 && コマンド2
コマンド1実行後のERRORLVELが0の時だけ、コマンド2を実行します。つまり、
 コマンド1
 IF %ERRORLEVEL%==0 コマンド2
の短い書き方です。

 コマンド1 || コマンド2
コマンド1実行後のERRORLEVELが0でない時だけ、コマンド2を実行します。

 コマンド1 & コマンド2
コマンド1を実行してERRORLEVELがどうであれ、コマンド2を実行します。

ううむ。これらは何のコマンドの /? に書いてあるのかな?cmd /? には書いてないですね。
1010.
Re:existでワイルドカードは使えない?
2006年02月14日(火) 20時22分
koohee
otn様。
親切に説明して頂き、本当に助かります。ありがとうございました。


>>・「/a-d」 これは「/a:-d」と同じことでしょうか?
>同じです。dir /? でも、 [/A[[:]属性]] と、: は省略可能と記されています。
・・・ごめんなさい。そうでした。

>>・「>NUL 2>NUL」 これはNULLデバイスにリダイレクト?する意味とは?。2>って?
>「ファイルがみつかりません」というエラーメッセージは、>NULでは消えないので、2>NUL で消します。一般にエラーメッセージは2番に出るので、2> でリダイレクトします。
・・・ふうむ。この辺は年季を感じます。
そもそも NUL の扱いがよく分かっていませんでした。
どりあえず、「dir /a-d && ありの処理」だけで実行しても期待通りの動きになっているようでした。
つまり、>NUL 2>NUL は表示上見えなくしているだけで、動作に影響はないとゆうことでしょうか。

>>・「&&」 なんでしょう?
> コマンド1 && コマンド2
>コマンド1実行後のERRORLVELが0の時だけ、コマンド2を実行します。つまり、
> コマンド1
> IF %ERRORLEVEL%==0 コマンド2
>の短い書き方です。
・・・なるほど。こうゆう書き方もできるんですか。
便利ですね。とゆうか、dir /a-d の後には if ステートメントが書けないみたいだから && を使うしかないんですかね。


いろいろと教えて頂きありがとうございました。

1015.
Re:existでワイルドカードは使えない?
2006年02月15日(水) 13時20分
otn
>>>・「>NUL 2>NUL」 これはNULLデバイスにリダイレクト?する意味とは?。2>って?
>>「ファイルがみつかりません」というエラーメッセージは、>NULでは消えないので、2>NUL で消します。一般にエラーメッセージは2番に出るので、2> でリダイレクトします。
>・・・ふうむ。この辺は年季を感じます。
>そもそも NUL の扱いがよく分かっていませんでした。
>どりあえず、「dir /a-d && ありの処理」だけで実行しても期待通りの動きになっているようでした。
>つまり、>NUL 2>NUL は表示上見えなくしているだけで、動作に影響はないとゆうことでしょうか。

その通り。表示だけの問題です。NUL はブラックホール相当の擬似ファイル名(正確にはデバイス名)です。
> と 2> については、C言語をご存知なら、「stdout と stderr のことです」と簡単に説明できるのですが、プログラミングをご存じなければ説明が難しい。
「リダイレクトで思いどおりリダイレクトできなければ、2> も試してみる」くらいに思っておけばいいでしょう。

>>>・「&&」 なんでしょう?
>> コマンド1 && コマンド2
>>コマンド1実行後のERRORLVELが0の時だけ、コマンド2を実行します。つまり、
>> コマンド1
>> IF %ERRORLEVEL%==0 コマンド2
>>の短い書き方です。
>・・・なるほど。こうゆう書き方もできるんですか。
>便利ですね。とゆうか、dir /a-d の後には if ステートメントが書けないみたいだから && を使うしかないんですかね。

短く書きたいという思いが無ければ、%ERRORLEVEL% を使うほうが、間違いが無いし、他人が読んだときわかりやすいです。

慣れると、
dir /ad %DIR% >NUL 2>NUL && (
 コマンド1
 コマンド2
)
とか書いたりもしますが。  
1016.
Re:existでワイルドカードは使えない?
2006年02月16日(木) 16時38分
koohee
otn様

またまた詳しく説明して頂きありがとうございます。

>>つまり、>NUL 2>NUL は表示上見えなくしているだけで、動作に影響はないとゆうことでしょうか。
>
>その通り。表示だけの問題です。NUL はブラックホール相当の擬似ファイル名(正確にはデバイス名)です。
>> と 2> については、C言語をご存知なら、「stdout と stderr のことです」と簡単に説明できるのですが、プログラミングをご存じなければ説明が難しい。
>「リダイレクトで思いどおりリダイレクトできなければ、2> も試してみる」くらいに思っておけばいいでしょう。
・・・そうゆうことですか。私も仕事でCを使ってたことがあるので理解できました。

>短く書きたいという思いが無ければ、%ERRORLEVEL% を使うほうが、間違いが無いし、他人が読んだときわかりやすいです。
>慣れると、
>dir /ad %DIR% >NUL 2>NUL && (
> コマンド1
> コマンド2
>)
>とか書いたりもしますが。  
・・・この書き方もできるんですね。
確かに短くコンパクトにしたい、とゆうのもありますが、分かり易さも大切ですよね。

 
 

1001.existでワイルドカードは使えない? koohee 06/02/13(月) 22:54
1002.Re:existでワイルドカードは使えない? じゃく 06/02/14(火) 00:20
1005.Re:existでワイルドカードは使えない? otn 06/02/14(火) 04:08
1007.Re:existでワイルドカードは使えない? koohee 06/02/14(火) 14:29
1009.Re:existでワイルドカードは使えない? otn 06/02/14(火) 18:23
1010.Re:existでワイルドカードは使えない? koohee 06/02/14(火) 20:22
1015.Re:existでワイルドカードは使えない? otn 06/02/15(水) 13:20
1016.Re:existでワイルドカードは使えない? koohee 06/02/16(木) 16:38
1008.Re:existでワイルドカードは使えない? じゃく 06/02/14(火) 16:12
 
 


カテゴリー「EXIST」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2006年02月13日 10:07に投稿されたエントリーのページです。

ひとつ前の投稿は「あるフォルダ内の全フォルダを削除するには」です。

次の投稿は「バッチファイルを直接起動すると無限ループしてしまう」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
 
このブログについて | 運営:有限会社メディアポート