I have a VB Script (.vbs file) that is just a simple directory listing of a drive. It will the base of a drive back up scri开发者_StackOverflow中文版pt. But when running it as it is below, I am getting a Permission Denied error on some folder. What I need to find is what that folder is so I can figure out what the problem is with the folder.
The line that is giving the error is "For Each TempFolder In MoreFolders". So what I am trying to figure out is how to WScript.Echo the current path (objDirectory) if there is an error.
I am not sure if it matters much, but just in case, the error that I am getting is Permission Denied 800A0046 on line 12. So some folder, I do not know which one, is not letting me look inside.
Set WSShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject ("Scripting.FileSystemObject")
Dim FolderArr()
FolderCount = 0
TopCopyFrom = "G:\"
Sub WorkWithSubFolders(objDirectory)
Set MoreFolders = objDirectory.SubFolders
'The next line is where the error occurs (line 12)
For Each TempFolder In MoreFolders
FolderCount = FolderCount + 1
ReDim Preserve FolderArr(FolderCount)
FolderArr(FolderCount) = TempFolder.Path
' WScript.Echo TempFolder.Path
WorkWithSubFolders(TempFolder)
Next
End Sub
ReDim Preserve FolderArr(FolderCount)
FolderArr(FolderCount) = TopCopyFrom
Set objDirectory = objFSO.GetFolder(TopCopyFrom)
WorkWithSubFolders(objDirectory)
Set objDirectory = Nothing
WScript.Echo "FolderCount = " & FolderCount
WScript.Sleep 30000
Set objFSO = Nothing
Set WSShell = Nothing
Try adding the On Error Resume Next
statement before the For Each
loop and checking the Err.Number
property after the problematic line, like this:
Sub WorkWithSubFolders(objDirectory)
On Error Resume Next
Set MoreFolders = objDirectory.SubFolders
For Each TempFolder In MoreFolders
If Err.Number = 0 Then
FolderCount = FolderCount + 1
ReDim Preserve FolderArr(FolderCount)
FolderArr(FolderCount) = TempFolder.Path
WorkWithSubFolders(TempFolder)
Else
WScript.Echo "Error #" & Err.Number & " " & Err.Description & vbNewLine & _
TempFolder.Path
Err.Clear
End If
Next
End Sub
It looks like you are trying to open a folder that is "Protected" in some way.
If the "For Each TempFolder In MoreFolders" failed, then further processing after trapping the error will not allow you to see which folder failed by examining the value of "TempFolder.Path". In fact, accessing "TempFolder.Path" in the error handling code will often cause an unhandled error and the script will crash.
It is a little cleaner to capture the name of the folder and trap the error before you get to the "For Each" loop:
Option Explicit
Dim objWSShell
Dim objFSO
Dim objDirectory
Dim FolderCount
Dim ErrFolderCount
Dim TopCopyFrom
Dim FolderArr()
Dim strDirFullName
Dim intDummy
Dim intErrorNumber
Dim strErrorDescription
'' Set objWSShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject ("Scripting.FileSystemObject")
FolderCount = 0
ErrFolderCount = 0
TopCopyFrom = "C:\"
ReDim Preserve FolderArr(FolderCount)
FolderArr(FolderCount) = TopCopyFrom
WScript.Echo "Processing: " & FolderArr(FolderCount)
Set objDirectory = objFSO.GetFolder(TopCopyFrom)
WorkWithSubFolders objDirectory
Set objDirectory = Nothing
WScript.Echo "FolderCount = " & FolderCount
WScript.Sleep 30000
If (ErrFolderCount > 0) Then
WScript.Echo "ErrFolderCount = " & ErrFolderCount
End If
Set objFSO = Nothing
'' Set objWSShell = Nothing
WScript.Quit
Sub WorkWithSubFolders(objDirectory)
Dim MoreFolders
Dim TempFolder
strDirFullName = objDirectory.Path
'' WScript.Echo "Processing: " & strDirFullName
On Error Resume Next
intDummy = objDirectory.SubFolders.Count
intErrorNumber = Err.Number
strErrorDescription = Err.Description
Err.Clear
On Error Goto 0
If (intErrorNumber <> 0) Then
WScript.Echo "Error #" & intErrorNumber & ", " & strErrorDescription & ", Processing folder: " & strDirFullName
ErrFolderCount = ErrFolderCount + 1
Exit Sub
End If
Set MoreFolders = objDirectory.SubFolders
For Each TempFolder In MoreFolders
FolderCount = FolderCount + 1
ReDim Preserve FolderArr(FolderCount)
FolderArr(FolderCount) = TempFolder.Path
WorkWithSubFolders(TempFolder)
Next
End Sub
Output:
Processing: C:\
Error #70, Permission denied, Processing folder: C:\$Recycle.Bin\S-1-5-24-248752723-3714214951-6237883060-500
Error #70, Permission denied, Processing folder: C:\$Recycle.Bin\S-1-5-24-192348782-4665637426-2144812622-1001
Error #70, Permission denied, Processing folder: C:\$Recycle.Bin\S-1-5-24-192348782-4665637426-2144812622-1002
Error #70, Permission denied, Processing folder: C:\$Recycle.Bin\S-1-5-24-192348782-4665637426-2144812622-1003
Error #70, Permission denied, Processing folder: C:\$Recycle.Bin\S-1-5-24-192348782-4665637426-2144812622-500
Error #70, Permission denied, Processing folder: C:\Documents and Settings
Error #70, Permission denied, Processing folder: C:\MSOCache
Error #70, Permission denied, Processing folder: C:\PerfLogs
Error #70, Permission denied, Processing folder: C:\Program Files (x86)\Google\CrashReports
Error #70, Permission denied, Processing folder: C:\Program Files (x86)\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
Error #70, Permission denied, Processing folder: C:\Program Files (x86)\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\JOBS
Error #70, Permission denied, Processing folder: C:\Program Files (x86)\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Log
...
...
...
Error #70, Permission denied, Processing folder: C:\Windows\Prefetch
Error #70, Permission denied, Processing folder: C:\Windows\security\audit
Error #70, Permission denied, Processing folder: C:\Windows\ServiceProfiles\LocalService
Error #70, Permission denied, Processing folder: C:\Windows\ServiceProfiles\NetworkService
Error #70, Permission denied, Processing folder: C:\Windows\System32\com\dmp
Error #70, Permission denied, Processing folder: C:\Windows\System32\config
Error #70, Permission denied, Processing folder: C:\Windows\System32\ias
Error #70, Permission denied, Processing folder: C:\Windows\System32\LogFiles\Fax\Incoming
Error #70, Permission denied, Processing folder: C:\Windows\System32\LogFiles\Fax\Outgoing
Error #70, Permission denied, Processing folder: C:\Windows\System32\LogFiles\Firewall
Error #70, Permission denied, Processing folder: C:\Windows\System32\LogFiles\HTTPERR
Error #70, Permission denied, Processing folder: C:\Windows\System32\LogFiles\WMI
Error #70, Permission denied, Processing folder: C:\Windows\System32\Msdtc
Error #70, Permission denied, Processing folder: C:\Windows\System32\NetworkList
Error #70, Permission denied, Processing folder: C:\Windows\System32\RsFx
Error #70, Permission denied, Processing folder: C:\Windows\System32\spool\PRINTERS
Error #70, Permission denied, Processing folder: C:\Windows\System32\Tasks
Error #70, Permission denied, Processing folder: C:\Windows\System32\wbem\MOF
Error #70, Permission denied, Processing folder: C:\Windows\System32\wdi
Error #70, Permission denied, Processing folder: C:\Windows\System32\wfp
Error #70, Permission denied, Processing folder: C:\Windows\SysWOW64\com\dmp
Error #70, Permission denied, Processing folder: C:\Windows\SysWOW64\config
Error #70, Permission denied, Processing folder: C:\Windows\SysWOW64\Msdtc
Error #70, Permission denied, Processing folder: C:\Windows\SysWOW64\NetworkList
Error #70, Permission denied, Processing folder: C:\Windows\SysWOW64\Tasks
Error #70, Permission denied, Processing folder: C:\Windows\Temp
FolderCount = 59815
ErrFolderCount = 1109
精彩评论