2010-10-22 8 views
0

Comme VBScript a notoirement une mauvaise gestion des erreurs intégrée, j'ai essayé de contourner cela en enveloppant mes blocs principaux dans une boucle Do While Err.Number = 0. Théoriquement, cela devrait fonctionner: si un script a l'instruction On Error Resume Next activée, le script contournera le gestionnaire d'erreurs intégré dans WSH (c'est-à-dire l'arrêtera complètement) tout en remplissant son objet Err. Ce qui devrait arriver ensuite, c'est que le numéro d'erreur change, ce qui devrait déclencher une interruption dans la boucle et le faire sauter vers mon autre branche de code. (Désolé pour les références ASM.)VBScript ne sortant pas de la boucle 'Do-While'?

Cependant, cela ne semble pas fonctionner tout le temps. Parfois, il fera exactement ce qui est décrit ci-dessus et fonctionnera magnifiquement. D'autres fois, cependant, il ignore complètement le changement et continue. Même lorsque je vérifie l'objet dans un débogueur, je peux voir WSH changer le numéro d'erreur et ses autres membres, mais ignorant aveuglément la condition de la boucle!

Ce qui donne?

Exemple:

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) 

Merci!

+0

En fait, je ne m'en suis même pas rendu compte! J'ai accepté les réponses à certaines questions que j'avais écrites auparavant; Merci pour le rappel. –

Répondre

1

En fait, peu importe. VBScript n'est pas comme les langages compilés et ne peut pas se déconnecter des boucles car il exécute chaque instruction de façon procédurale. Encore une raison de passer mes scripts à .NET ou quelque chose.