For Schleife wird 2mal durchlaufen
Hallo Leute,
ich habe eine kleine batch geschrieben, die mir einen bestimmten IP Bereich abscannt und mir die IPs, die nicht erreichbar sind in ein Textfile schreibt. Funktioniert eigentlich auch sehr gut, bis auf folgendees Problem:
Die Schleife wird zweimal durchlaufen. Bei meinem Debugg versuch habe ich mir mal den Zähler ausgeben lassen bei jedem Durchgang.
Er läuft schön brav von 1 durch bis Endwert, dann wird er auf null gesetzt und die Schleife wird erneut durchlaufen. Nach dem zweiten Erreichen des Endwertes, bekommt er auf einmal den Wert, mit dem ich die batch starte und bricht ab.
Dies ist reproduzierbar.
Allerdings kann ich nicht verstehen, wo da der Hund begraben ist?!
Ich wäre für jede Hilfe dankbar!
HaHa...
Bevor ich zum Veröffentlichen gekommen bin, hab ich den Fehler erkannt...
Der Aufruf von sub1!
Auskommentiert und es läuft nur noch einmal durch.
rem call :sub1
rem :sub1
Allerdings verstehe ich nicht warum!
Gut , ich brauche keine sub an der Stelle, dehalb auch der Versuch. Aber wieseo führt das zu einer doppelten Ausführung?
Wenn mir das ein Crack erklären kann, wäre ich sehr dankbar! Und hätte wieder was dazu gelernt...
ich habe eine kleine batch geschrieben, die mir einen bestimmten IP Bereich abscannt und mir die IPs, die nicht erreichbar sind in ein Textfile schreibt. Funktioniert eigentlich auch sehr gut, bis auf folgendees Problem:
Die Schleife wird zweimal durchlaufen. Bei meinem Debugg versuch habe ich mir mal den Zähler ausgeben lassen bei jedem Durchgang.
Er läuft schön brav von 1 durch bis Endwert, dann wird er auf null gesetzt und die Schleife wird erneut durchlaufen. Nach dem zweiten Erreichen des Endwertes, bekommt er auf einmal den Wert, mit dem ich die batch starte und bricht ab.
Dies ist reproduzierbar.
Allerdings kann ich nicht verstehen, wo da der Hund begraben ist?!
Ich wäre für jede Hilfe dankbar!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
SET /a start=%1
call :sub1
:sub1
SET /a end=254
SET /a end=%end%-%start%
SET /a start=%start%-1
FOR /L %%i IN (1,1,%end%) DO call :sub2 %%i
goto :ende
:sub2
rem echo i=%1
SET /a ip=0
SET /a ip=%start%+%1
ping -n 1 -w 1000 172.16.11.%ip%
if errorlevel 1 ( echo 172.16.11.%ip% >> c:\temp\terminals_fail.txt)
rem pause
goto :ende
:ende
HaHa...
Bevor ich zum Veröffentlichen gekommen bin, hab ich den Fehler erkannt...
Der Aufruf von sub1!
Auskommentiert und es läuft nur noch einmal durch.
rem call :sub1
rem :sub1
Allerdings verstehe ich nicht warum!
Gut , ich brauche keine sub an der Stelle, dehalb auch der Versuch. Aber wieseo führt das zu einer doppelten Ausführung?
Wenn mir das ein Crack erklären kann, wäre ich sehr dankbar! Und hätte wieder was dazu gelernt...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 647097
Url: https://administrator.de/forum/for-schleife-wird-2mal-durchlaufen-647097.html
Ausgedruckt am: 13.04.2025 um 13:04 Uhr
5 Kommentare
Neuester Kommentar
Servus,
klar: https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...
Using the <label> parameter:
By using call with the <label> parameter, you create a new batch file context and pass control to the statement after the specified label. The first time the end of the batch file is encountered (that is, after jumping to the label), control returns to the statement after the call statement. The second time the end of the batch file is encountered, the batch script is exited.
klar: https://docs.microsoft.com/de-de/windows-server/administration/windows-c ...
Using the <label> parameter:
By using call with the <label> parameter, you create a new batch file context and pass control to the statement after the specified label. The first time the end of the batch file is encountered (that is, after jumping to the label), control returns to the statement after the call statement. The second time the end of the batch file is encountered, the batch script is exited.
Moin,
Gruß Thomas
Zitat von @CMOS78:
Allerdings verstehe ich nicht warum!
Gut , ich brauche keine sub an der Stelle, dehalb auch der Versuch. Aber wieseo führt das zu einer doppelten Ausführung?
na wieso wohl. Guck dir mal genau an, was der Unterschied zwischen goto und call ist. Goto springt zu einem bestimmten Punkt. Call hingegegen ruft einen Bereich ab der Sprungmarke auf und kehrt anschließend wieder zum Ausgangspunkt zurück.Allerdings verstehe ich nicht warum!
Gut , ich brauche keine sub an der Stelle, dehalb auch der Versuch. Aber wieseo führt das zu einer doppelten Ausführung?
Gruß Thomas
Hallo,

Man könnte auch
Schreiben.
Gruß,
Peter
Zitat von @CMOS78:
Bevor ich zum Veröffentlichen gekommen bin, hab ich den Fehler erkannt...
Allerdings verstehe ich nicht warum!
Spiele einfach mal Processor und arbeite deine Batchdatei ab, Zeile für Zeile...Das du mal ein Call verwendest und mal nicht ist eher unerheblich. Du Rufst Sub1 auf und danach nochmal. Das macht also 2 mal hintereinander. Was soll denn sonst passieren wenn du ohne Bedingungen oder Sprungmarken so Arbeitest. Works as designed. Bevor ich zum Veröffentlichen gekommen bin, hab ich den Fehler erkannt...
Allerdings verstehe ich nicht warum!
Man könnte auch
1
2
3
4
5
6
2
3
4
5
6
call :sub1
Goto istnurneSprungmarke
:sub1
:IstnurneSprungmarke
Gruß,
Peter
moin,
Weil Du das hingeschrieben hast.
Einmal läuft er über den Call, kommt zurück und läuft halt nochmal rein. Wenn Du das nicht willst. muß Du hinter dem Call ein goto hinschreiben.
lks