Verständnisfrage zur For-Schleife
Es geht darum Batches eine zeitlang mittels der For-Schleife anzuhalten. Allerdings sind die Zeiten leider nicht identisch, als wenn man den Ping-Befehl dazu nutzt.
Bisher habe ich in meinen Batches als Pause immer den Befehl benutzt. In der Annahme, daß der Batch 10 Sekunden pausiert.
Ich habe nun einen Vergleich gemacht und muß festellen, daß die Zeiten der pause bein der For-Schleife immer unterschiedlich sind. Voran liegt daß?
Gruß Penny.
Hier der Testcode, welchen ich verwendet habe:
Hier die Ausgaben, welche erzeugt wurden:
Bisher habe ich in meinen Batches als Pause immer den Befehl
For /L %%var in (1, 1, 10000) Do Echo. > NUL
Ich habe nun einen Vergleich gemacht und muß festellen, daß die Zeiten der pause bein der For-Schleife immer unterschiedlich sind. Voran liegt daß?
Gruß Penny.
Hier der Testcode, welchen ich verwendet habe:
@Echo off
:: CLS
Setlocal ENABLEEXTENSIONS & Setlocal ENABLEDELAYEDEXPANSION
Echo For /L mit Params 1,1,1000
Echo Start: %time:~,8%
For /L %%S in (1, 1, 10000) Do Echo. > NUL
Echo Ende: %time:~,8%
Echo.
Echo Ping
Echo Start: %time:~,8%
ping 127.0.0.1 -n 11 > nul
Echo Ende: %time:~,8%
Hier die Ausgaben, welche erzeugt wurden:
Z:\ > Test_Counter.cmd
For /L mit Params 1,1,1000
Start: 13:28:38
Ende: 13:28:41
Ping
Start: 13:28:41
Ende: 13:28:51
Z:\ > Test_Counter.cmd
For /L mit Params 1,1,1000
Start: 13:30:40
Ende: 13:30:43
Ping
Start: 13:30:43
Ende: 13:30:53
Z:\ > Test_Counter.cmd
For /L mit Params 1,1,1000
Start: 13:31:00
Ende: 13:31:03
Ping
Start: 13:31:03
Ende: 13:31:13
Z:\ >
For /L mit Params 1,1,1000
Start: 13:28:38
Ende: 13:28:41
Ping
Start: 13:28:41
Ende: 13:28:51
Z:\ > Test_Counter.cmd
For /L mit Params 1,1,1000
Start: 13:30:40
Ende: 13:30:43
Ping
Start: 13:30:43
Ende: 13:30:53
Z:\ > Test_Counter.cmd
For /L mit Params 1,1,1000
Start: 13:31:00
Ende: 13:31:03
Ping
Start: 13:31:03
Ende: 13:31:13
Z:\ >
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 203983
Url: https://administrator.de/forum/verstaendnisfrage-zur-for-schleife-203983.html
Ausgedruckt am: 16.02.2025 um 20:02 Uhr
8 Kommentare
Neuester Kommentar
![110135](/images/members/profile_male_48x48.png)
Hallo,
das könnte daran liegen, dass ein PC die Schleife schneller durchläuft als ein anderer -> Bessere CPU, mehr RAM, etc pp.
Gruß,
Florian
das könnte daran liegen, dass ein PC die Schleife schneller durchläuft als ein anderer -> Bessere CPU, mehr RAM, etc pp.
Gruß,
Florian
Hallo Penny,
was brachte dich auf die Idee, dass ein for-Loop, der von 1-10000 läuft genau 10 Sekunden dauert?
Die Laufzeit ist m.E. von der Auslastung des Rechners abhängig
Ein paar nette Beispiele zu den verschiedenen Möglichkeiten einen WAIT zu realisieren gibts u.a. hier: http://www.robvanderwoude.com/wait.php
Gruß Andi
P.S: dein ECHO mit dem Text ist übrigens nicht ganz richtig, du zählst nicht auf 1000 sondern auf 10000![face-wink face-wink](/images/icons/fa/light/face-laugh-wink.svg)
was brachte dich auf die Idee, dass ein for-Loop, der von 1-10000 läuft genau 10 Sekunden dauert?
Die Laufzeit ist m.E. von der Auslastung des Rechners abhängig
Ein paar nette Beispiele zu den verschiedenen Möglichkeiten einen WAIT zu realisieren gibts u.a. hier: http://www.robvanderwoude.com/wait.php
Gruß Andi
P.S: dein ECHO mit dem Text ist übrigens nicht ganz richtig, du zählst nicht auf 1000 sondern auf 10000
Hallo Penny.Cilin!
VBS sollte ja generell zur Verfügung stehen - damit ließe sich eine Pause so realisieren:
Natürlich kannst Du am Ende des Patches die Datei "%Pausiere%" wieder löschen.
Grüße
bastla
VBS sollte ja generell zur Verfügung stehen - damit ließe sich eine Pause so realisieren:
set Pausiere="%temp%\Pausieren.vbs"
>%Pausiere% echo WScript.Sleep WScript.Arguments(0)*1000
::
::
:: Aufruf im Batch für eine Pause von etwa 10 Sekunden:
%Pausiere% 10
Grüße
bastla
Hallo Penny.Cilin.
Es gibt da (neben dem TIMEOUT Befehl neuerer Windowsversionen) das gute alte Ping. Mit dem lässt sich fast millisekundengenau arbeiten, wenn man von der Ladezeit des ping.exe Prozesses mal absieht. Möglich wäre in dem Fall das Anpingen einer nicht vergebenen IP-Adresse. Z.B. 192.0.2.0, die im Adressbereich "TEST-NET" liegt und für Präsentationen und Codebeispiele reserviert ist.
Die Zahl hinter der Option -w gibt das Zeitlimit in Millisekunden an.
Grüße
rubberman
Es gibt da (neben dem TIMEOUT Befehl neuerer Windowsversionen) das gute alte Ping. Mit dem lässt sich fast millisekundengenau arbeiten, wenn man von der Ladezeit des ping.exe Prozesses mal absieht. Möglich wäre in dem Fall das Anpingen einer nicht vergebenen IP-Adresse. Z.B. 192.0.2.0, die im Adressbereich "TEST-NET" liegt und für Präsentationen und Codebeispiele reserviert ist.
>nul ping -n 1 -w 10000 192.0.2.0
Grüße
rubberman