2010-04-17 58 views
0

我有一個VB腳本(.vbs文件),它只是一個簡單的驅動器目錄列表。它將成爲驅動器備份腳本的基礎。但是當它在下面運行時,我在某個文件夾上收到了Permission Denied錯誤。我需要找到的是該文件夾是什麼,所以我可以找出文件夾的問題。VBScript捕獲錯誤的變量值

發生錯誤的行是「For Each TempFolder In MoreFolders」。所以我想弄清楚如何WScript.Echo當前路徑(objDirectory)如果有錯誤。

我不確定它是否重要,但爲了以防萬一,我得到的錯誤是第12行的權限被拒絕800A0046。所以某個文件夾,我不知道是哪一個,不讓我往裏看。

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 
+0

時會發生什麼用'TempFolder.Path'取消註釋你在那裏的行? – dmb 2010-04-17 22:18:29

回答

1

嘗試添加On Error Resume Next語句For Each循環之前和有問題的行之後檢查Err.Number屬性,像這樣:

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 
0

它看起來像你試圖打開一個「受保護的文件夾「 某種程度上來說。

如果「For Each TempFolder In MoreFolders」失敗,則在捕獲錯誤之後進一步處理將不允許您通過檢查「TempFolder.Path」的值來查看哪個文件夾失敗。實際上,訪問錯誤處理代碼中的「TempFolder.Path」通常會導致未處理的錯誤,並且腳本會崩潰。

這是一個有點清潔捕捉到的文件夾,並捕獲錯誤的名字你到之前,「對於每一個」循環:

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 

輸出:

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