我在我的vb脚本中编写了一个错误处理子
errorNumber = DoAllWork
Sub ErrorHandling (Number, Description, i)
If Number <> 0 Then
WriteLogFileLine logfile, "Error No : " & Number & " - " & Description & " has occurred !"
Else
WriteLogFileLine logfile, "Success copying files as Err.Number : " & Err.Number & "Total " & i & " files were copied ! " & vbcrlf
End If
Err.Clear
End Sub
我在我的vb脚本中调用它
Function DoAllWork
On Error Resume Next
Err.Clear
Do Until CopyFiles.AtEndOfStream
line = CopyFiles.ReadLine
For Each line In CopyFiles
If objFSO.GetFolder(line).Files.Count <> 0 then
WriteLogFileLine logfile, "Copying files FromLocation " & Chr(34) & line & Chr(34) & " to ToLocation " & Chr(34) & ToLocation & Chr(34)
Else
WriteLogFileLine logfile, "No files present in the folder " & Chr(34) & line & Chr(34) & vbcrlf
End if
i=0
For Each File In objFSO.GetFolder(line).Files
objFSO.GetFile(File).Copy ToLocation & "\" & objFSO.GetFileName(File),True
i=i+1
Next
ErrorHandling Err.Number, Err.Description, i
Next
Loop
End Function
现在,即使文件已成功复制,正在创建的日志文件也会记录此错误消息。有人可以建议这种错误处理技术有什么问题吗?
2015-12-15 15:03:47 - Copying files FromLocation "\\srv10219\archive\Article\20151116_073104" to ToLocation "C:\Users\TEMPPAHIR\LearnVB\ICCdata\Article" 2015-12-15 15:03:47 - Error No : 438 - Object doesn't support this property or method has occurred !
当我在File.copy
语句后直接放置此错误处理时,它会给我这样的日志..
2015-12-15 16:31:55 - Error No : 438 - Object doesn't support this property or method has occurred ! 2015-12-15 16:31:55 - Success copying files as Err.Number : 0 2015-12-15 16:31:55 - Total 2 files were copied !
这意味着对于正在复制的第一个文件会抛出错误,对于第二个文件,即使两个文件都已成功复制,它也会成功
答案 0 :(得分:0)
我实现了这个以完成你所要求的。脚本需要做的是将文件夹及其内容放入目录中,然后将内容复制到正确格式化的新文件夹,其中有一个轮询器,它拾取文件并在我们的系统中输入。我需要脚本来退出任何错误,特别是最后要做的事情。那是从源目录中删除文件夹,但我必须确保它被正确复制。 (您可以清除错误并继续。)
所以在每个重要的行之后,如文件夹创建或文件副本,我做了这个检查。这对我来说可以做错误处理。传递Err对象本身是最好的方法。
Set FolderCreate = FSO.CreateFolder(PreStagingDirectory + "\" + FolderCreateName)
ReportErrors Err,"Error creating folder: " + PreStagingDirectory + "\" + FolderCreateName
FSO.CopyFile objFile.Path, FolderCreate.Path + "\", true
ReportErrors Err,"Error copying file: " + objFile.Path + " to location: " + FolderCreate.Path
Sub ReportErrors(ErrorObject, strExtraInformation)
'This will log any errors if they happen and the script will then quit
If ErrorObject.Number <> 0 Then
OutPutFile.WriteLine(DateTimeString + " Error Number: " & ErrorObject.Number)
OutPutFile.WriteLine(DateTimeString + " Error (Hex): " & Hex(ErrorObject.Number))
OutPutFile.WriteLine(DateTimeString + " Source: " & ErrorObject.Source)
OutPutFile.WriteLine(DateTimeString + " Description: " & ErrorObject.Description)
OutPutFile.WriteLine(DateTimeString + " Other Information: " + strExtraInformation)
OutPutFile.WriteLine(DateTimeString + " Script is quitting due to the Error Condition.")
wscript.quit
End If
End Sub
我也做过这样的代码。在这种情况下,我需要捕获是否从SQL查询返回null到数据库。如果返回null并且我尝试转换值,则会导致错误。
要回答这个问题,您应该检查子中的错误并清除它们,或者通过脚本检查错误,这实际上取决于您需要完成的任务。
首先,我必须说vbscipt中的错误处理很糟糕。使用&#39; On Error Resume Next&#39;,绝对需要,但要小心放置它。我发现最好将它放在main中,顶部,只是在每个函数中。最重要的是要记住范围,如果你把它放在一个函数中,你会在那里捕获错误,并且可以处理它。如果您只将它作为脚本的第一行,则只能处理main中的错误。有时候主要需要它。
同样要调试任何vbscript,注释掉对它的任何调用,否则你永远不会知道这个问题。
ExecutionString = "select Sum(cast(Frame_Count as int)) from Sop_Instance_T"
Set objRecordSet = objConnection.Execute(ExecutionString)
TotalFrames = cdbl(objRecordSet(0))
'In case null is returned catch the exception
'that happens on the above line
If Err.Number <> 0 Then
TotalFrames = 0
Err.Clear ()
End If