У меня есть пакетный файл, который называет VBScript (.vbs) программой. После вызова его, моих проверок сценария пакетной обработки %errorlevel%
видеть, перестала ли .vbs программа работать. Я могу предупредить об отказе с кодом выхода в .vbs программе с WScript.Quit(1)
.
Однако я могу только сделать это явно. Если некоторая непредвиденная ошибка выполнения происходит, выходы .vbs с ошибочным диалоговым окном, однако код выхода является нулем, таким образом, мой пакетный файл думает, что это успешно выполнилось! Как я могу изменить то поведение?
И если Вы думаете о высказывании, использовать on error goto
, не беспокойтесь..., что синтаксис доступен в регулярном VB, но не в VBScript.
Мне пришло в голову нестандартное решение... Кто сказал, что 0 должен означать успех? VBScript иногда возвращает код возврата 0 при неудачах, так почему бы не принять это? Примите 0 в качестве (по крайней мере, одного возможного) кода неудачи и придумайте другое число (например, 10) в качестве "кода успеха".
В конце сценария поместите WScript.Quit(10). Это будет сделано только в том случае, если до этого момента все прошло успешно. Затем вместо "if errorlevel 1" в вызывающем пакетном файле используйте "if %errorlevel% == 10"
Как вы говорите, все, что доступно, это On Error Resume Next
, поэтому вы вынуждены использовать паттерн:
On Error Resume Next
ThingWithAChanceOfThrowingAnError ...
If (Err.number <> 0) then PrintErrorAndQuitWith1(Err.Description)
Вы можете использовать технику, описанную в эта статья . Это требует, чтобы вы обернули ваш скрипт внутри класса VBScript.