我正在编写一个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行应该授予代码提升权限/权限,但这似乎也没有帮助。
答案 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