VBScript CopyFile сообщает об ошибке 53 Файл не найден, но файл успешно скопирован - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь диагностировать проблему с 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 голосов
/ 04 июня 2019

Проблема была связана с логикой обработки ошибок в VBS, она сообщала номер ошибки из предыдущей строки!On Error Resume Next позволил коду продолжить работу, но последующие вызовы, даже успешные, не перезаписывали объект Err.Поэтому, когда я захотел проверить результат, он обнаружил эту предыдущую ошибку.

Итак, я думаю, что если вы не хотите, чтобы If Err.Number... везде, то перед каждым «блоком» кода вы хотите проверить ошибку.сначала очистите объект Err с помощью Err.Clear.

Я бы хотел, чтобы VBScript имел On Error Goto как его двоюродный брат!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...