90957

If Verschachtelung - Wie weit kann mans treiben?

Hallo Leute,
ich habe mal eine ganz simple Frage.

Ich habe festgestellt dass Batch ab einer bestimmten Menge
ineinander Geschachtelter IF-Abfragen abschmiert.
Ich ich habe ausser dem auch festgestellt, dass wenn man zu viele Befehle
inerhalb eines "IFs" plaziert, das Batch Skript abschmiert.
(Beides kann man allerdings verhindern in dem man einfach die Befehle
per Call :einsprungpunkt auslagert.)

Ich würde gerne wissen ob jemand weiß unter welchen Umständen ein Fehlerfreies
Batch-Skript inerhalb einer IF-Abfrage aussteigt.
Bzw. bei welcher Anzahl von Zeilen/Befehlen/Weiteren IF-Abfragen/Zeichen...

Rund um ... An welche Faktoren diese Abstürze gebunden sind.

Ich weiß, durch laaaaanges rumprobieren könnte ich dass VIELEICHT auch herausfinden,
aber ich habe nicht die Zeit und die Muße da rum zu probieren.

Ich verlange auch nicht dass sich jetzt jemand anders hinsetzt und das für mich
macht, sondern ich hoffe einfach dass jemand das schon irgendwoher weiß
und so nett ist sein Wissen mit mir zu teilen.

Gruß
BluBb_mADe
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 157539

Url: https://administrator.de/forum/if-verschachtelung-wie-weit-kann-mans-treiben-157539.html

Ausgedruckt am: 05.07.2025 um 04:07 Uhr

pieh-ejdsch
pieh-ejdsch 24.12.2010 um 16:59:52 Uhr
Goto Top
moin BluBb_mADe,

ich bin bisher noch nicht an irgendwelche Grenzen von von Schleifenverschachtelungen gestoßen.

der einzige Nachteil ist, das man nicht auf den ersten Blick nachvollziehen kann, wo der Fehler bzw. die Fehlerhafte Proggrammierung vorliegt - wegen der Klammer die diese Befehle zu einer BefehlsZeile zusammenfasst.
bau genug "Echo's" und "Rem's" ein damit Du den Fehler genauer eingrenzen kannst.
und lass das ganze mit "@echo on" laufen.

wieviele IF - Schleifen hast Du denn verschachtelt?
Gruß Phil
90957
90957 24.12.2010 um 17:37:09 Uhr
Goto Top
Wenn du ein Batch-Programm (ja ich weiß eigentlich ist es nur ein skript)
mit über 1400 Zeilen hast (ja ich weiß ich bin verrückt)
dann nervt es schon wenn du in jeder zweiten Sub (so verwende ich meißt einsprungpunkte)
irgend ein Teil ausgelagern musst...
Ich hab ja schon gesagt, dass ich es mit viel versuchen möglicher weise herausfinden kann.
Aber das dauert vermutlich ewig...
Ich bekomme diesen Fehler schon bei über 5 längeren Zeilen innerhalb einer IF-Schleife...
und bei über 2 verschachtelungen also:

set a=5
set x=5
set y=5
set z=5
IF %x%==%y% (
   IF %y%==%z% (
      IF %a%==%x% (
         echo blablablablablablalangertext
         echo über mehrere zeilen
         echo als zeichen dass es nicht geht.....
         echo fragt nicht, das macht keinen sinn...
      )
   )
)
funktioniert bei mir manchmal schon nicht mehr.
(Das ist nur ein Beispiel, so verwende ich das natürlich nicht!!!)

Gruß
BluBb_mADe
pieh-ejdsch
pieh-ejdsch 24.12.2010 um 21:09:51 Uhr
Goto Top
versuch doch mal
if "%x%" == "%y%" (....  
also die Variablen mit Doppeltem Hochkommata umschliessen und zwischen den Vergleichen und dem == auch jeweils ein Leerzeichen einfügen.
sonst - falls eine dieser Variablen im Vergleich nicht gesetzt ist (oder Leerzeichen; einige Sonderzeichen enthält) fasst IF in die Grütze.

Gruß Phil
90957
90957 24.12.2010 um 22:27:23 Uhr
Goto Top
Also ich poste jetzt erstmal ein Beispiel Programmschnipsel der net funktioniert:

If "%var1%"=="%var2%" (  
	echo aktuell
) else (
	if exist "file" (  
		ren file file.backup
	)
	wget -q -t 10 -N http://xxxxxxxxxxxx.xx/file
	if exist file (
		del flile.backup
		for /L %%i in (1,1,5) do (
			echo !var1!+%%i
			if "!var3!" == "!var1!+%%i" (  
				echo stimmt
			)
		)
		echo Erfolgreich auf  "!var2!" aktualisiert.  
	) else (
		ren file.backup file
		echo Fehler bei der Aktualisierung.
	)
)

Wie ich bereits schon erwähnt habe ist das Programm über 1400 "Zeilen" lang...
Ich habe solche spielereien durchaus beachtet und ich kann dir sagen:
Es funnktioniert, wenn ich es auslagere!!!

Also wenn ich den selben Code per "Call" aufrufe funktioniert er...
Das hatte ich auch schon oben erwähnt...
Trotz dem danke für deine Mühen

Gruß

BluBb_mADe

*Edit:
bin mal wieder auf ein solches Proble, gestoßen:
if not "%vara%" == "" (  
	echo alt: "%vara%"  
	echo neu: "%varb%"  
) else (
	echo alt: ist Defekt oder fehlt.
	echo neu: "%varb%" wird jetzt Installiert...  
	echo.
)
pause
..warum stürzt mein Skript dabei ab???
jeb-the-batcher
jeb-the-batcher 25.12.2010 um 19:37:30 Uhr
Goto Top
Hallo BluBb-mADe,

erstens würde ich auf Delayed Expansion wechseln, da die viele Probleme umgeht.
z.B. Wenn in %vara% oder %varb% eine Klammer ) oder Hochkomma " drin ist, hat dein Skript sonst Probleme.

Bei deinen Skripten tritt bei mit kein Fehler auf, dazu müßte man mal die entsprechenden Inhalte der Varibalen sehen.

Weihnachtliche Grüße
jeb
pieh-ejdsch
pieh-ejdsch 25.12.2010 um 19:41:30 Uhr
Goto Top
moin,

steckt in vara oder varb eine ungerade Zahl doppelter Hochkommata (oder bei gerader Anzahl Hochkommata und dazwischen etwas wie & > < | etc ) solltest Du die Variable verzögert ausgeben - Du nutzt ja auch DelayedExpansion in dem Teil oder diese SonderZeichen Escapen mit ^.

hast Du mal die Batch ins CMD-Fenster gezogen um etwaige Meldungen lesen zu können?
zB. "..." kann syntaktisch an dieser Stelle nicht verarbeitet werden.

was steht in var3?

ist es nicht besser nach dem
wget ... ein &&( mache das auch )||(mache das als ersatz)
einzufügen?

[Edit] etwas zu spät [/Edit]

Gruß Phil
90957
90957 25.12.2010 um 21:15:06 Uhr
Goto Top
Tachchen,
in allen Variablen stecken ausschließlich strings aus zahlen und/oder kleinbuchstaben
(oder sie sind leer)!!!
das habe ich schon durch ca. 100 echos überprüft!
(ich habe mir schon nach jeder zeile alle variablen in "" ausgeben lassen)
und ich habe (wie oben schon 2 mal erwähnt) festgestellt:
wenn ich tief verschachtelte teile des codes auslagere, arbeiten sie einwandfrei.

hast Du mal die Batch ins CMD-Fenster gezogen um etwaige Meldungen lesen zu können?
Danke, da bin ich noch gar nicht drauf gekommen!

bei:
war ich mir nicht sicher ob das mit wget richtig funktioniert, da ich keine original wget.exe verwende sondern ein "alles in einer exe" wget.

...der fehler im zweiten schnipsel ensteht anscheinden in zeile 7 und die fehlermedlung lautet:
batch datei nicht gefunden
???
ich glaube irgendwas an meinem system hat was auf n deckel bekommen.
der drag and drop debugging trick is trotz dem super praktisch...
(da hätt ich echt selber drauf kommen müssen ._.)

Ich markier mal als gelöst, da ihr ja nicht mal den fehler reproduzieren könnt...

da muss ich wohl mein system erst mal flicken
(was auch immer da nicht stimmt...)

Trotz allem vielen Danke für die Antworten

und noch ein par schöne Festtage

Gruß
BluBb_mADe