Jak wyświetlić listę folderów najwyższego poziomu dysku za pomocą VBScript?

0

Szukam kodu VBScript, który będzie wyświetlał foldery najwyższego poziomu na dysku D: a nie podfoldery. Do tej pory używam następującego zapytania WMI, ale daje mi ono wszystkie foldery i schodzi na wiele poziomów. Wydaje się również, że po prostu przestaje z powodu, którego jeszcze nie określiłem.

Set colFolders = objWMIService.ExecQuery("Select * from Win32_Directory Where Drive = 'D:'")

EDYTOWAĆ:

Po dalszych poszukiwaniach znalazłem coś, co daje mi to, czego chciałem. Na wypadek, gdyby inni szukali tutaj, jest VBScript dla folderów i rozmiarów:

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
set objFolder = objFSO.GetFolder("D:\")
for Each folder in objFolder.SubFolders
    On Error Resume Next
    size = folder.size
    if Err.Number <> 0 Then
        size = -1
    end if
    wscript.echo folder.name,size
Next
lewisc
źródło
3
Powinieneś opublikować odpowiedź i oznaczyć ją jako zamkniętą.
gWaldo

Odpowiedzi:

1

Aby określić, że chcesz mieć tylko foldery najwyższego poziomu, musisz dodać Path = '\\'warunek do WHEREklauzuli:

strComputer = "."
Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

Set colFolders = oWMI.ExecQuery _
    ("SELECT * FROM Win32_Directory WHERE Drive = 'D:' AND Path = '\\' ",, 48)

For Each oFolder In colFolders
    WScript.Echo oFolder.Name
Next

Alternatywnie można użyć ASSOCIATORS OFzapytania, aby uzyskać foldery najwyższego poziomu jako podfoldery katalogu głównego dysku:

strComputer = "."
Set oWMI = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colFolders = oWMI.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='D:\'} " _
        & "WHERE AssocClass = Win32_Subdirectory " _
            & "ResultRole = PartComponent",, 48)

For Each oFolder In colFolders
    WScript.Echo oFolder.Name
Next

Ale FileSystemObjectrozwiązanie jest prawdopodobnie łatwiejsze.

Helen
źródło