2016-08-05 43 views
1

Ich schreibe ein VBScript, um alle Verzeichnisse (Ordner) auf einem der Laufwerke meines Systems aufzulisten, ob sie leer sind oder nicht in eine Excel-Datei. Dies geschieht erfolgreich, wenn ich einen Ordnerspeicherort eines Laufwerks übergebe, aber wenn ich den gesamten Laufwerksspeicherort übergebe, heißt es "permission denied! Code-800A0046". Dies liegt daran, dass einige versteckte Ordner wie System Volume Information usw. vorhanden sind, für die Berechtigungen benötigt werden. Ich möchte entweder alle diese Ordner überspringen oder einen Weg finden, auf solche Ordner zuzugreifen. Wie erreiche ich das? Unten ist mein Skript:Wie überspringe ich Ordner, auf die mein vbscript nicht zugreifen kann?

If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , WScript.ScriptFullName & " /elevate", "", "runas", 1 
    WScript.Quit 
End If 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Add 
objExcel.Visible = True 
intRow = 1 
Set FSO = CreateObject("Scripting.FileSystemObject") 
For Each objFolder In FSO.GetFolder("C:\").SubFolders 
    if ((objFolder.Attributes = 0) OR (objFolder.Attributes AND 1)) then 
     ShowSubFolders objFolder 
    End If 
Next 

Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
    if ((Subfolder.Attributes = 0) OR (Subfolder.Attributes AND 1)) then 
     If Subfolder.Size = 0 Then 
      objExcel.Cells(intRow,1) = SubFolder.Path 
      objExcel.Cells(intRow,2) = "Empty" 
      intRow = intRow + 1 
     Else 
      objExcel.Cells(intRow,1) = SubFolder.Path 
      objExcel.Cells(intRow,2) = "Not Empty" 
      intRow = intRow + 1 
      End If 
    End If 
    Next 
End Sub 
Set FSO = nothing 

Die ersten 5 Zeilen sollen den Code erhöhten Rechte/Privilegien gewähren, aber das scheint nicht zu helfen.

+0

Ihre ersten 5 Liness Ihr Skript geben [Administratorrechte] (https://msdn.microsoft.com/en-US/library/windows/desktop/ms717801 (v = vs.85) .aspx). Um auf 'System Volume Information' zuzugreifen, müssen Sie [SYSTEM] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190 (v = vs.85) .aspx) sein. Eine einfache und schnelle Möglichkeit, sie zu überspringen, ist 'On Error Resume Next'. Zugang zu gewähren würde bedeuten Besitz zu übernehmen ... Du willst das nicht tun. – Clijsters

Antwort

0

Vielen Dank @ Clijsters für den Kommentar. Es hat wirklich geholfen.

On Error Resume Next 

ist in der Tat, was ich suchte, anscheinend.

Ich habe abgeschlossen, was ich tun wollte (soweit diese Frage betroffen ist). Unten ist mein Code für zukünftige Referenzen:

On Error Resume Next 
' Giving the script administrator privileges 
If Not WScript.Arguments.Named.Exists("elevate") Then 
    CreateObject("Shell.Application").ShellExecute WScript.FullName _ 
    , WScript.ScriptFullName & " /elevate", "", "runas", 1 
    WScript.Quit 
End If 

'creating an excel application object 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Workbooks.Add 
intRow = 1 
objExcel.Cells(intRow,1) = "Folder Path" 
objExcel.Cells(intRow,2) = "Empty or Not" 
intRow = intRow + 2 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set colDrives = FSO.Drives 
For Each objDrive in colDrives 
    For Each objFolder In FSO.GetFolder(objDrive.RootFolder).SubFolders 
     ShowSubFolders objFolder 
    Next 
Next 

'Function to determine whether a folder is Empty or not and enter its path in an excel 
Sub ShowSubFolders(Folder) 
    For Each Subfolder in Folder.SubFolders 
     If Subfolder.Size = 0 Then 
      objExcel.Cells(intRow,1) = Subfolder.Path 
      objExcel.Cells(intRow,2) = "Empty" 
      intRow = intRow + 1 
     Else 
      objExcel.Cells(intRow,1) = Subfolder.Path 
      objExcel.Cells(intRow,2) = "Not Empty" 
      intRow = intRow + 1 
     End If 
    Next 
End Sub 
Set FSO = Nothing 
objExcel.Activeworkbook.SaveAs("EmptyFolders.xlsx") 
objExcel.Visible = True 
+0

Danke für die Antwort! Nur damit Sie wissen, Antworten sind nicht für zusätzliche Fragen oder Gespräche mit einem Kommentator. Wenn Sie auf einen bestimmten Kommentator aufmerksam machen möchten, antworten Sie bitte in den Kommentaren darauf. – halfer