VBS aus einem if heraus vorherige do schleife übernehmen?

... komplette Frage anzeigen

4 Antworten

Da ich auch nicht genau weiß, was du meinst, kann ich nur ein paar Lösungen anbieten und hoffen, dass eine davon dir hilft.

  • Mit Continue kannst du den nächsten Schleifendurchlauf initiieren.
  • Du kannst innerhalb der Schleife die Schleifenvariablen, die im Kontrollteil der Schleife stehen, beliebig setzen und damit die Anzahl an Durchläufen steuern.
  • Wenn du mitten im Code springen willst, hast du wahrscheinlich einen Designfehler. Gliedere dein Programm und schaffe Subprozeduren, idealerweise eigene Klassen.
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MarkusGenervt
25.10.2016, 01:50

In VBScript gibt es keinen "Continue"-Befehl.

0

Mir ist irgendwie nicht ganz klar, was Du meinst. Außerdem ist Dein Beispiel hier unschlüssig. Soll "Befehl 3" jetzt die THEN-Anweisung sein oder hast du diesen einfach ausgelassen? Ist "i" ein Tipp-Fehler und soll eigentlich "j" heißen?

Grundsätzlich wird jede If-Anweisung innerhalb eines Do-Blocks ganz normal wie jeder andere Befehl auch ausgeführt und führt nicht zu einem Austritt, wenn kein "Exit Do" als Sub-Befehl folgt.

Antwort bewerten Vielen Dank für Deine Bewertung

Das hier wär der Quellcode zum script, ist etwas unordentlich aber es ist auch das erste VBS das ich schreibe



strComputer = "."

Set fso = CreateObject("Scripting.FileSystemObject")
Set wnet = CreateObject("WScript.Network")
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\\\" & strComputer & "\\root\\cimv2")
set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
Set colItems = objRefresher.AddEnum _
(objWMIService, "Win32_PerfFormattedData_TCPIP_NetworkInterface").objectSet
objRefresher.Refresh
'
'
'
Do
For Each objItem in colItems
i = 3
Wscript.Sleep 100
D = objItem.BytesReceivedPersec
Wscript.Echo " 1 "
'
'
'
if D < 5000                          
    '
    '
    j = 0
    Do
    j = j+1
    Wscript.Sleep 100
    Wscript.Echo " 0 "
    '
    '
    '
    '
    
    if objItem.BytesReceivedPersec < 5000 Then'  
    '
    '
    '
    End If 
    Loop Until j = 30
    Set WshShell = WScript.CreateObject("WScript.SHell")
    WshShell.Run "start_1.bat",1,True   
    '
    '
    '
    Else
    End If
    
    loop until i = 10


objRefresher.Refresh

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von MarkusGenervt
25.10.2016, 01:47

Das ist ja ganz grausig ;-)

Erst mal benutze doch bitte die Code-Formatierung "<>"

So und nun inhaltlich :

If Bedingung1 Then
Befehl1
ElseIf Bedingung2 Then
Befehl2
Else
Befehl3
End If

Die einzelnen ElseIf- und Else-Blöcke sind optional. NICHT optional sind "Then" und "End If".

Ein Options-Block ohne Befehl ist völlig sinnlos.

Die erste Do-Loop-Schleife läuft endlos, da Du intern immer "i=3" setzt und somit die Loop-Bedingung "i=10" nie erreicht wird.

Die zweite Do-Loop-Schleife macht gar nichts, außer 30x " 0 " an die Ausgabe zu senden und dazwischen jeweils 100 Millisekunden zu warten. Wenn Du dieses Script mit wscript aufrufst, werden 30 Dialoge mit " 0 " geöffnet.

Bitte strukturiere auch mal den Quellcode ordentlich. Da muss man ja ins Schleudern kommen mit den Code-Blöcken.

0

konstruktionsfehler

umdenken ist das einzige was da hilft

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Derwesen
25.10.2016, 01:22

könnte ich dir den Quellcode geben und du schaust ihn dir kurz an?

0

Was möchtest Du wissen?