ここから本文です

特定のフォルダのファイル有無チェックしたい要望があります。 条件として、新た...

アバター

ID非公開さん

2019/3/422:30:57

特定のフォルダのファイル有無チェックしたい要望があります。

条件として、新たなプログラムソフトをお金をかけて購入してまでではないものです。

OSはWindows(7)を使っており、Officeはなんと2003を使用しているという環境です。

そこで私はVBSCRIPTを作成し、スタートアップに登録しておき、Windowsログインごとに

ファイルの有無チェックする仕掛けでやりたいと思っています。

特定のフォルダは決められたフォルダへCSVファイルを格納しておき、VBSCRIPTで読んで、

チェックする。ファイルの有無をメッセージボックスで出力するとともに決められたフォルダへ

テキストファイルを出力したいと考えています。

そこで、苦慮しているのがファイルのチェック有無のロジックです。

サンプルとして、

'ファイルシステムオブジェクトを生成
Set FS = CreateObject("Scripting.FileSystemObject")

'C:\vbs\test.txtが存在するかを確認
ret = FS.FileExists( "C:\vbs\test.txt" )

のように特定のファイルであれば上記のように記述すればよいのでしょうが、

私はワイルドカードで何かしらのファイルが存在した場合は出力したいと考えています。

何か良い方法があれば、ご教示よろしくお願いいたします。

ネットで検索しているもののなかなかうまくできず苦慮しております。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
31
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

lin********さん

リクエストマッチ

2019/3/423:13:11

ワイルドカードを使えないので、私なら、

Option Explicit
Dim c, f, gf, i, so, tx, x
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(so.GetParentFolderName(WScript.ScriptFullName))
x = Array("csv", "xml", "xlsx")
Set tx = so.OpenTextFile(gf & "\List.txt", 2, True)
For i = 0 to UBound(x)
c = 0
For Each f In gf.Files
If LCase(so.GetExtensionName(f.Name)) = x(i) Then
c = 1
Exit For
End If
Next
If c = 0 Then
tx.WriteLine x(i) & " : Not Exists"
Else
tx.WriteLine x(i) & " : Exists"
End If
Next
tx.Close
Set tx = Nothing
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")

簡単な説明です。

x = Array("csv", "xml", "xlsx")

今回は、拡張子の存在の有無を調べています。

Set tx = so.OpenTextFile(gf & "\List.txt", 2, True)

プログラムファイルの存在するフォルダ内に「List.txt」という結果ファイルを作成します。

For i = 0 to UBound(x)

「csv」、「xml」、「xlsx」の順番に調べます。

c = 0

チェック用変数の初期化。

For Each f In gf.Files

プログラムファイルの存在するフォルダ内のすべてのファイルを1つずつ処理。

If LCase(so.GetExtensionName(f.Name)) = x(i) Then

見つかったファイルの拡張子が「x()」に一致したら、

c = 1

「c = 1」にして、「見つかった」としておきます。

Exit For

見つかった場合は、それ以上調べなくていいので、「For Each f In gf.Files ~ Next」を抜け出しています。

If c = 0 Then

ここまできて、「c = 0」の場合は、その拡張子は「見つからなかった」ということですので、

tx.WriteLine x(i) & " : Not Exists"

「csv : Not Exists」などと「List.txt」に書き込みます。

Else

「c = 1」の場合は、「見つかった」ということで、

tx.WriteLine x(i) & " : Exists"

「csv : Exists」などと書き込みます。

というような考え方では、ダメでしょうか(よほど、ファイルの数が多くない限り、かかる時間など、無視できるほどだと思うのですが・・・)。

アバター

質問した人からのコメント

2019/3/9 07:55:37

ありがとうございました!無事にモジュール作成できました!細かい説明までつけていただいたおかげです。

ベストアンサー以外の回答

1〜1件/1件中

kab********さん

2019/3/422:57:02

FSOが使えるのであれば・・・ 後すぐですよ!
http://officetanaka.net/excel/vba/filesystemobject/folder.htm

調べたいフォルダは特定のフォルダって決まっているんですよね?
であれば、そのフォルダ内にあるファイル名をすべて取得すればOKじゃないかしら?

それでファイル名が一つでも取得できれば、その特定フォルダ内にファイルはある!
ファイル名を取得できなければ、ファイルはない!

これでやりたい切り分けができると思うけれど、どうかな?

そして特定フォルダ内のファイル名を取得する方法は、それこそFSOを利用すればできますよ。
その記述してあるURLに Filesプロパティ の説明があります。
頑張ってみてください!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる