Vba 脚本在受保护的文件(如系统文件)上停止

Vba 脚本在受保护的文件(如系统文件)上停止,vba,vbscript,Vba,Vbscript,由于系统文件等受保护的文件,“权限被拒绝”,此代码在一段时间后停止 有没有办法修改下面的代码,以便它可以处理或绕过这些受保护的文件 Set objFS=CreateObject("Scripting.FileSystemObject") WScript.Echo Chr(34) & "Full Path" &_ Chr(34) & "," & Chr(34) & "File Size" &_ Chr(34) & "," &am

由于系统文件等受保护的文件,“权限被拒绝”,此代码在一段时间后停止

有没有办法修改下面的代码,以便它可以处理或绕过这些受保护的文件

Set objFS=CreateObject("Scripting.FileSystemObject") 
WScript.Echo Chr(34) & "Full Path" &_ 
 Chr(34) & ","  & Chr(34) & "File Size" &_ 
 Chr(34) & ","  & Chr(34) & "File Date modified" &_ 
 Chr(34) & "," & Chr(34) & "File Date Created" &_ 
 Chr(34) & "," & Chr(34) & "File Date Accessed" & Chr(34) 
Set objArgs = WScript.Arguments 
strFolder = objArgs(0) 
Set objFolder = objFS.GetFolder(strFolder) 
Go (objFolder) 
Sub Go(objDIR) 
  If objDIR <> "\System Volume Information" Then 
    For Each eFolder in objDIR.SubFolders 
        Go eFolder 
    Next    
  End If 
    For Each strFile In objDIR.Files 
        WScript.Echo Chr(34) & strFile.Path & Chr(34) & "," &_ 
        Chr(34) & strFile.Size & Chr(34) & "," &_ 
        Chr(34) & strFile.DateLastModified & Chr(34) & "," &_ 
        Chr(34) & strFile.DateCreated & Chr(34) & "," &_ 
        Chr(34) & strFile.DateLastAccessed & Chr(34) 
    Next  
End Sub 

确保进程具有权限

您可以通过添加

On Error Resume Next
在代码中要忽略错误的部分之前

用于恢复默认行为的语句为

On Error GoTo 0
请注意:如果VB和VBScript中的方法调用显示为单个语句,则它们不使用括号。因此,行
Go(objFolder)
应替换为
Go objFolder

我已简化了您的代码(基于重复的问题),在不尝试处理错误的情况下,我可以看到一个问题:
objDIR。当其中一个子文件夹(例如\系统卷信息)失败时,子文件夹
将失败没有被查看的权限!您需要对文件夹使用另一种方法来枚举FolderName,将它们与现有路径组合,然后捕获错误。当您没有权限时,GetFolder可能会导致错误。(我现在没有时间编写解决方案。)


VBScript允许错误捕获,但不如VBA优雅。试试下面的脚本

On Error Resume Next
    '[ ... code ...  ]
Dim test_result, divisor

 divisor = 1        '' No error
'divisor = 0        '' raise error #11
'divisor = "zero"   '' raise a different error

test_result = 2/divisor

If Err.Number = 11 then  ''This line must appear at the point error is raised
    MsgBox "Handled Error: " & Err.Description
ElseIf Err.Number > 0 then 
    MsgBox "Error: " & Err.Number & "  " & Err.Description
    Err.Clear   ''if you wanted to proceed clean from here
End If

MsgBox "Result: " & test_result

我会试一试,让你知道结果。Cheerre如果我使用这种方法忽略错误,那么它将处理文件,这听起来不太好,我需要确保所有文件都得到处理。无论是否受到保护。我正在使用RUNAS命令,但这也不起作用。有什么建议吗,伙计们,你们在玩什么操作系统?如果您使用的是Vista/Windows 7,请不要忘记使用提升功能运行脚本。@MalsiaPro如果您需要更多的控制,则只需使用Err对象来查找错误。例如:如果错误编号=70Then@MalsiaPro“听起来不太好”——你说得对!当您隐藏运行时错误时,会使问题不可见。。。这使得它们很难解决“下一步继续”确实有用,但会让许多程序员陷入麻烦。
Option Explicit

Dim objFS
Dim objArgs
Dim strFolder
Dim objFolder

Set objFS = WScript.CreateObject("Scripting.FileSystemObject")
WScript.StdOut.WriteLine """Full Path"",""File Size""," & _
  """File Date modified"",""File Date Created""," & _
  """File Date Accessed"""
Set objArgs = WScript.Arguments
strFolder = objArgs(0)
Set objFolder = objFS.GetFolder(strFolder)
Go objFolder
Sub Go(objDIR)
  Dim strFile
  On Error Resume Next
    For Each eFolder in objDIR.SubFolders
        Go eFolder
    Next
    For Each strFile In objDIR.Files
        WScript.StdOut.WriteLine """" & strFile.Path & """,""" & _
          strFile.Size & """,""" & _
          strFile.DateLastModified & """,""" & _
          strFile.DateCreated & """,""" & _
          strFile.DateLastAccessed & """"
    Next
End Sub
On Error Resume Next
    '[ ... code ...  ]
Dim test_result, divisor

 divisor = 1        '' No error
'divisor = 0        '' raise error #11
'divisor = "zero"   '' raise a different error

test_result = 2/divisor

If Err.Number = 11 then  ''This line must appear at the point error is raised
    MsgBox "Handled Error: " & Err.Description
ElseIf Err.Number > 0 then 
    MsgBox "Error: " & Err.Number & "  " & Err.Description
    Err.Clear   ''if you wanted to proceed clean from here
End If

MsgBox "Result: " & test_result