VBScript не выходит из цикла «Do-While»? - PullRequest
0 голосов
/ 22 октября 2010

Поскольку в VBScript общеизвестно плохая встроенная обработка ошибок, я попытался обойти это, обернув свои основные блоки в цикл Do While Err.Number = 0. Теоретически это должно работать: если в скрипте включен оператор On Error Resume Next, он будет обходить встроенный обработчик ошибок в WSH (т.е. полностью его останавливать), все еще заполняя свой объект Err. Что должно произойти дальше, это то, что номер ошибки изменится, что должно вызвать прерывание в цикле и заставить его выпрыгнуть в другую ветвь кода. (Извините за ссылки ASM.)

Однако, похоже, это не всегда работает. Иногда он будет делать именно то, что описано выше, и будет работать прекрасно. В других случаях, однако, он просто полностью игнорирует изменения и продолжает идти. Даже когда я проверяю объект в отладчике, я вижу, как WSH изменяет номер ошибки и другие ее члены, но слепо игнорирует условие цикла!

Что дает?

Пример:

Dim TestObject
Do While Err.Number = 0
     Set TestObject = CreateObject("Scripting.FileSystem") 'should trigger an error
     WScript.Echo "Who cares about your DO?!"
Loop
WScript.Echo "Script should go here."
WScript.Quit(0)

Спасибо!

1 Ответ

1 голос
/ 22 октября 2010

На самом деле, неважно. VBscript не похож на скомпилированные языки и не может переходить из циклов, потому что он выполняет все операторы процедурно. Еще одна причина, чтобы переключить мои сценарии на .NET или что-то еще.

...