2011-09-15 16 views
0

Iveはこのような何十年もの間、成功していませんでした。 は、私はあなたがWMIを使用することができサブフォルダの存在を確認する方法VB6

For i = 0 To 3 'got 4 different loc to check sub folders 
    Set f = fso.GetFolder(backupdir(i)) 
    Set sf = f.SubFolders 
    For Each fr In sf 'for each folder in sub folder 
     Do Until fr = "" Or fr = Null 
      If fso.FolderExists(fr.SubFolders) Then 
      'if more sub folders exist i wanna make sure 
      'that i can get their subfolders too 
      'till there is no sub folder left.. 
       sf = fr 
      End If 
     Loop 
    Next fr 
Next i 
+0

*再帰的*検索の後にあなたのように見えます。@ http://vbnet.mvps.org/index.html?code/fileapi/recursive.htm –

+0

これは本当に便利ですが、私が検索する特定のパスを含めることができます。 "\\ blabla \ Afolder \ ThefolderIsearchFor \ AnotherFolder"のように –

+0

申し訳ありませんが、そのリンクは私が意図したものではありませんでした。あなたはそれを開き、* FindFirstFileをクリックする必要があります:フォルダマスク(最小限のコード)を使用してフォルダの再帰検索*関連* –

答えて

5

を再帰的に呼び出すと、フォルダのフォルダを通過するような操作が呼び出されます。

FindFirstFile:フォルダマスク(最小限のコード)hereを使用したフォルダの再帰検索は、Windows APIで迅速にこれを行う方法を示しています。

0

..私は名前を与えられましsubdfolderが存在しているかどうかを確認する必要があります。あなたはCIM_Directoryで検索することができました。私はフィールド名が "name"であると信じています。 とフォルダ名が含まれていたり、探しているフォルダ名がある場合は完全名を返します。

+0

にリンクを投稿できますか? @Alex Kの助けを借りてそれをすでに解決しましたが、他のオプションも見たいと思っています。 –

2

このコードを確認してください。

Dim FolderList As String 

Private Sub SubCheck1(folderToCheck As String) 
    Dim fso, f, f1, s, sf 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set f = fso.GetFolder(folderToCheck) 
    Set sf = f.SubFolders 
    For Each f1 In sf 
     FolderList = FolderList & "|" & f1.Name 
     Call SubCheck1(f1.Path) 
    Next 
End Sub 

Private Sub Form_Load() 
    Call SubCheck1("c:\folderToSearch") 
    Debug.Print FolderList 
End Sub 

このコードは、指定されたディレクトリ(C:この場合は\ folderToSearch)内のすべてのサブフォルダを取得した文字列ののFolderListに書き込みます「|」セパレータ。

フォルダ名を「|」で区切る代わりに、配列を使用することもできます。 それとも、配列を取得するためににDebug.Print FolderList行の後に以下のコードを追加することができます。

myArray = split(FolderList, "|") 
+0

これは簡単な方法ですが、@ wqwよりも遅いです。私のような新しいスターターにとっては本当に良いです。 –

+0

サブフォルダの下にたくさんのサブフォルダがある場合は、プログラムを応答させるために、両方のSubCheckサブディレクトリにForループの下にDoEventsコマンドを追加できます。 – Nail

+0

と思っていました。 –

1

あなたはこの

Private Sub Command1_Click() 
    Dim vElem   As Variant 

    For Each vElem In pvGetFolders("C:\TEMP") 
     Debug.Print vElem 
    Next 
End Sub 

Private Function pvGetFolders(ByVal sRoot As String) As Collection 
    Dim lIdx   As Long 
    Dim sFile   As String 

    Set pvGetFolders = New Collection 
    pvGetFolders.Add sRoot 
    Do While lIdx < pvGetFolders.Count 
     lIdx = lIdx + 1 
     sFile = Dir(pvGetFolders.Item(lIdx) & "\*.*", vbDirectory) 
     Do While LenB(sFile) <> 0 
      If sFile <> "." And sFile <> ".." Then 
       sFile = pvGetFolders.Item(lIdx) & "\" & sFile 
       If (GetAttr(sFile) And vbDirectory) <> 0 Then 
        pvGetFolders.Add sFile 
       End If 
      End If 
      sFile = Dir 
     Loop 
    Loop 
    pvGetFolders.Remove 1 
End Function 
のようなコードの20行で収集し、標準 Dir機能と「再帰」サブフォルダすることができます
+0

非常にいい人は本当に使い方が好きだった。 –

関連する問題