脚本在受保护的文件(例如系统文件)上停止 [英] Script stops on protected files such as system files

查看:16
本文介绍了脚本在受保护的文件(例如系统文件)上停止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于受保护的文件(例如系统文件,权限被拒绝"),此代码会在一段时间后停止.

有没有办法修改下面的代码,使其可以处理或绕过此类受保护的文件?

Set objFS=CreateObject("Scripting.FileSystemObject")WScript.Echo Chr(34) &完整路径"&_Chr(34) &"," &Chr(34) &文件大小"&_Chr(34) &"," &Chr(34) &文件日期修改"&_Chr(34) &"," &Chr(34) &文件创建日期"&_Chr(34) &"," &Chr(34) &文件访问日期"&铬(34)设置 objArgs = WScript.ArgumentsstrFolder = objArgs(0)设置 objFolder = objFS.GetFolder(strFolder)去(对象文件夹)子去(objDIR)如果 objDIR <>"\System Volume Information" 然后对于 objDIR.SubFolders 中的每个电子文件夹去电子文件夹下一个万一对于 objDIR.Files 中的每个 strFileWScript.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 &铬(34)下一个结束子

<块引用>

然后从命令行调用它像这样.

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

解决方案

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

On Error Resume Next'[ ... 代码 ...  ]Dim test_result,除数除数 = 1 '' 没有错误'除数 = 0'' 引发错误 #11'divisor = "zero" '' 引发不同的错误test_result = 2/除数If Err.Number = 11 then ''This line must出现在点错误被引发MsgBox "处理错误:" &错误描述ElseIf Err.Number >0 那么MsgBox "错误:" &Err.Number &" " &错误描述Err.Clear ''如果你想从这里开始清理万一MsgBox "结果:" &测试结果

This code stops after a while due to protected files such as system files, "Permission Denied".

Is there a way to modify the code below so that it can handle such protected files or bypass them?

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 

Then call it from the command line like this.

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

解决方案

VBScript allows error trapping, though not as gracefully as VBA. Try the script below.

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

这篇关于脚本在受保护的文件(例如系统文件)上停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆