脚本在受保护文件(例如系统文件)上停止
问题描述:
由于受保护的文件(例如系统文件“拒绝权限”),此代码在一段时间后停止。脚本在受保护文件(例如系统文件)上停止
有没有办法修改下面的代码,以便它可以处理这样的受保护的文件或绕过它们?
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"
答
您可以通过要忽略错误的代码部分之前添加
On Error Resume Next
忽略在VBScript脚本错误。
的语句来恢复默认行为是
On Error GoTo 0
而就一句话:法在VB和VBScript电话如果它们显示为一个单独的语句不要使用圆括号。所以行Go (objFolder)
应该被替换为Go objFolder
。
答
我简化了您的代码(根据您的重复问题),而不尝试处理错误,我可以看到一个问题: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
会给它一个去,让你知道结果。 干杯 – MalsiaPro 2010-02-16 11:21:06