Hi, alL!
Since VBScript has notoriously bad built-in error handling, I've tried getting around that by wrapping my main blocks in a Do While Err.Number = 0
loop. Theoretically, this should work: if a script has On Error Resume Next
statement enabled, the script will bypass the built-in error handler in WSH (i.e. stop it completely) while still populating its Err
object. What should happen next is that the error number changes, which should trigger an interruption in the loop and have it jump out to my other branch of code. (Sorry for the ASM references.)
However, this doesn't seem to work all of the time. Sometimes, it will do exactly what's described above and work beautifully. Other times, though, it just completely ignores the change and keeps going. Even when I check the object in a debugger, I can see WSH changing the error number and its other members but blindly ignoring the loop condition!
What gives?
Example:
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)
Thanks!