如何跳过我的vbscript无权访问的文件夹?

时间:2016-08-05 12:10:44

标签: vbscript directory permission-denied

我正在编写一个vbscript来列出我系统其中一个驱动器上的所有目录(文件夹)以及它们是否为空或不是excel文件。当我传递驱动器的文件夹位置时它会成功,但是当我传入整个驱动器位置时,它会显示“权限被拒绝!代码-800A0046”。这是由于存在一些隐藏文件夹,如系统卷信息等,需要访问权限。我想要跳过所有这些文件夹或找到一种方法来访问这些文件夹。我该如何实现这一目标? 以下是我的剧本:

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

前5行应该授予代码提升权限/权限,但这似乎也没有帮助。

1 个答案:

答案 0 :(得分:0)

非常感谢@Clijsters的评论。它确实有帮助。

On Error Resume Next

确实是我在寻找的东西。

我已经完成了我想做的事情(就这个问题而言)。以下是我将来参考的代码:

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