[前の記事]« 日付形式のファイル名からいちばん最近のものを見つけるには[DIR]
[次の記事]バッチ処理で、前の処理の完了を待ってから次に移るには »

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

▲カテゴリー「SET, PATH, %環境変数%」索引へ

ディレクトリが空の場合の条件分岐


694) ディレクトリが空の場合の条件分岐 まつあき 2002/09/26(木) 13:38


初めて書きこみ致します。
バッチの作成にあたって、悩んでいるところがあり、
皆様のお知恵をお借りしたいです。

とあるディレクトリに1つもファイルがなかった場合に、
エラーを表示する処理にしたいと考えております。
とりあえず思いつかなかったので、
if not exist \dir\*.* goto :error
としてみましたが、やはりダメでした。
ファイル名は特定できないのですが、可能でしょうか?

Windows2Kを使用しています。
初歩的な内容かもしれませんがよろしくお願い致します。

695) Re:ディレクトリが空の場合の条件分岐 SYSOP 2002/09/26(木) 14:38


まつあきさん こんにちは。

>とあるディレクトリに1つもファイルがなかった場合に、
>エラーを表示する処理にしたいと考えております。
>とりあえず思いつかなかったので、
>if not exist \dir\*.* goto :error
>としてみましたが、やはりダメでした。
>ファイル名は特定できないのですが、可能でしょうか?

>Windows2Kを使用しています。

 307番のコメント・ツリー に似た質疑があります。
 といっても、ファイルではなく「サブディレクトリの有無」の判定の話題ですので、細かいところは若干違いますし、古い発言はいずれ消えてしまうので(この掲示板の発言保持容量は999です)、以下、上記を参考にあらためて書きますと、

・if exist...は、Win95系ならそれで正解です。(ただしgoto のあとに : を入れる必要はないです。 : はラベル自体のほうにだけ必要です)

・NT系では、空のディレクトリでも"*.*"で探すと"." (そのディレクトリ自身)や".."(親ディレクトリ)が検索されてしまうため、「何もファイル(やディレクトリ)がない」状態の検出にはIF EXIST... の構文が使えません。

・一方、FORコマンドによるファイル検索ならこの問題はないので、たとえば、
 SET FILES=NONE
 FOR %%F IN (foo\*.*) DO SET FILES=YES
 IF %FILES%.==NONE. ECHO ファイルがありません!

 ……のようにした場合は、DOのあとに"ファイルが何かあった場合の処理"が書けます。で、何もなければそこは一回も実行されずに次の行にいきますか ら、GOTOなりなんなりで「ファイルがあった場合の処理」を別の行や別のバッチファイルに飛ばしてやれば、次の行にはエラーメッセージが書けることにな ります。
 (DOのあとに書く処理など、もうちょっと賢いやり方もありそうな気がしますが、とりあえずということで……)

YanaKen


697) Re2:ディレクトリが空の場合の条件分岐 まつあき 2002/09/26(木) 16:16


大変素早くご回答いただき有難うございます。
教えていただいた方法で、望んだ通りの処理ができました。
ありがとうござました。
 
 


カテゴリー「SET, PATH, %環境変数%」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2002年09月26日 12:16に投稿されたエントリーのページです。

ひとつ前の投稿は「日付形式のファイル名からいちばん最近のものを見つけるには[DIR]」です。

次の投稿は「バッチ処理で、前の処理の完了を待ってから次に移るには」です。

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

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