VBScript CopyFile报告错误53未找到文件,但已成功复制文件

时间:2019-06-04 09:10:49

标签: error-handling vbscript

我正在尝试诊断VBScript FileSystemObject.CopyFile的问题,它报告错误53:找不到文件,但是它已成功复制了文件!我尝试使用CopyFile命令的变体,使用完整的目标名称或只是文件夹等没有区别,它总是复制文件。

更糟糕的是,如果我有意破坏它,通过更改源文件名,我仍然会收到错误53,这正是我要捕获并报告的确切情况。

On Error Resume Next

'copy the officeUI xml to the Microsoft Office folder
filePath = profilePath & "\Microsoft\Office\"
if not WshFSO.FolderExists(filePath) then
    WshFSO.CreateFolder filePath
end if
WshFSO.CopyFile scriptPath & "\Access.officeUI", filePath, True

'copy the foo client zip to \foo
filePath = profilePath & "\foo\"
if not WshFSO.FolderExists(filePath) then
    WshFSO.CreateFolder filePath
end if
WshFSO.CopyFile localZip, filePath, True
if Err.Number <> 0 then
    'catch that the copy failed
    msg = "Failed to copy Foo, please report this to Help Desk." _
        & vbCrLf & vbCrLf & "Citrix Server: " & WshNetwork.ComputerName _
        & vbCrLf & "Error: " & err.Number & " - " & err.Description      
    WshShell.Popup msg, , "Foo Launcher", 16
    Err.Clear
    WScript.Quit
end if

在最后的CopyFile调用中发生了错误。

1 个答案:

答案 0 :(得分:0)

该问题是由于VBS中的错误处理逻辑所致,它从较早的一行报告了错误号! On Error Resume Next允许代码继续运行,但是后续调用,即使是成功的调用,也不会覆盖Err对象。因此,当我确实要检查结果时,它收到了先前的错误。

因此,我认为除非要遍历If Err.Number...,否则在要进行错误检查的每个代码“块”之前,请先使用Err.Clear清除Err对象。

我希望VBScript的表亲喜欢On Error Goto