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

问题描述:

由于受保护的文件(例如系统文件“拒绝权限”),此代码在一段时间后停止。脚本在受保护文件(例如系统文件)上停止

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

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 

然后在命令行 这样调用它。

c:\test> cscript //nologo myscript.vbs "c:\" > "C:\test\Output.csv" 

确保过程具有的权限。 see

+0

会给它一个去,让你知道结果。 干杯 – MalsiaPro 2010-02-16 11:21:06

您可以通过要忽略错误的代码部分之前添加

On Error Resume Next 

忽略在VBScript脚本错误。

的语句来恢复默认行为是

On Error GoTo 0 

而就一句话:法在VB和VBScript电话如果它们显示为一个单独的语句不要使用圆括号。所以行Go (objFolder)应该被替换为Go objFolder

+0

如果我想用这种方法来忽略错误,那么它将技能文件,这听起来不太好,我需要确保所有的文件处理。无论是否受到保护。我正在使用RUNAS命令,但这不起作用。任何建议家伙。 – MalsiaPro 2010-02-17 09:03:15

+0

你在什么操作系统上?如果你在Vista/Windows 7上,不要忘记用高程运行你的脚本。 – 2010-02-17 09:19:00

+0

@MalsiaPro如果你想要更多的控制,那么只是Err对象的错误。例如:*如果Err.Number = 70 Then * – Oorang 2010-02-18 14:25:47

我简化了您的代码(根据您的重复问题),而不尝试处理错误,我可以看到一个问题:objDIR.SubFolders失败时,其中一个子文件夹(如\ System Volume Information)没有权限被观看!您需要在文件夹上使用其他方法来枚举文件夹名称,将它们与现有路径合并,然后捕获该错误.GetFolder可能会导致您没有权限。 (目前我没有时间编码该解决方案。)

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

+1肯定会有帮助! – Smandoli 2010-03-31 20:09:22

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