我正在尝试诊断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
调用中发生了错误。
答案 0 :(得分:0)
该问题是由于VBS中的错误处理逻辑所致,它从较早的一行报告了错误号! On Error Resume Next
允许代码继续运行,但是后续调用,即使是成功的调用,也不会覆盖Err
对象。因此,当我确实要检查结果时,它收到了先前的错误。
因此,我认为除非要遍历If Err.Number...
,否则在要进行错误检查的每个代码“块”之前,请先使用Err.Clear
清除Err对象。
我希望VBScript的表亲喜欢On Error Goto
!