Dies ist die neueste Version dessen, was ich in der Praxis für eine zehnsekündige Pause verwende, um die Ausgabe zu sehen, wenn ein Skript beendet ist.
BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul
Mit echo done kann ich sehen, wann das Skript beendet ist, und mit ping kann ich die Verzögerung feststellen. Die zusätzlichen @-Zeichen bedeuten, dass ich den "done"-Text sehe und die Wartezeit ohne Ablenkung durch ihre Befehle abläuft.
Ich habe die verschiedenen hier vorgestellten Lösungen auf einem XP-Rechner ausprobiert, da ich eine Batch-Datei haben wollte, die auf verschiedenen Rechnern läuft, und deshalb habe ich den XP-Rechner als die Umgebung gewählt, die am wenigsten leistungsfähig ist.
GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul
Dies führte erwartungsgemäß zu einer Verzögerung von drei Sekunden. Ein Ping-Versuch dauert 3 Sekunden.
BAD> ping -n 5 192.0.2.0 > nul
Dies dauerte etwa 10 Sekunden (nicht 5). Meine Erklärung ist, dass es 5 Ping-Versuche gibt, die jeweils etwa eine Sekunde auseinander liegen, also 4 Sekunden. Und jeder Ping-Versuch dauerte wahrscheinlich etwa eine Sekunde, also insgesamt 9 Sekunden.
BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice
Befehle nicht verfügbar.
BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs
Ich habe das auch versucht, nachdem ich gelesen hatte, dass man Kommentare zu BAT-Dateien durch zwei aufeinanderfolgende Doppelpunkte hinzufügen kann. Die Software kehrte jedoch fast augenblicklich zurück. Wenn ich den Kommentar in eine eigene Zeile vor dem Ping einfüge, klappt es.
GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul
Um besser zu verstehen, wie ping in der Praxis funktioniert, habe ich
ping 192.0.2.0 -n 5 -w 5000
Dies dauerte etwa 30 Sekunden, obwohl 5*5=25. Meine Erklärung ist, dass es 5 Ping-Versuche gibt, die jeweils 5 Sekunden dauern, aber es gibt eine Zeitverzögerung von etwa 1 Sekunde zwischen den Ping-Versuchen: Es gibt schließlich wenig Grund, ein anderes Ergebnis zu erwarten, wenn man sofort wieder anpingt, und es ist besser, einem Netzwerk etwas Zeit zu geben, um sich von dem Problem zu erholen, das es hatte.
Bearbeiten: gestohlen von weiterer Beitrag , .. RFC 3330 sagt, dass die IP-Adresse 192.0.2.0 nicht im Internet auftauchen sollte, so dass das Anpingen dieser Adresse verhindert, dass diese Tests jemanden spammen! Ich habe den obigen Text entsprechend geändert!
27 Stimmen
Kurze Antwort für alle, die hier landen: Seit Windows Vista gibt es eine native Lösung:
TIMEOUT
. Verweise: SS64 , Rob van der Woude .3 Stimmen
Es gibt Timeout Befehl, der sekundenlang wartet. Falls ein Millisekunden-Schlaf benötigt wird, kann der Powershell-Befehl Start-Schlaf verwendet werden können. Um 50ms in cmd zu schlafen:
powershell Start-Sleep -m 50
0 Stimmen
@Pavel: Man kann auch einen Ping an einen nicht existierenden Host missbrauchen, um für Millisekunden zu schlafen.
0 Stimmen
Eine gute Zusammenfassung der verschiedenen Techniken zum Anhalten eines Batch-Datei-Prozesses: robvanderwoude.com/warten.php
12 Stimmen
Versuchen Sie dies:
timeout /t 5 /nobreak >nul
0 Stimmen
Nur zum Spaß, wenn Sie Node.js installiert haben, können Sie
node -e 'setTimeout(a => a, 5000)'
es funktioniert auf einem Mac mit Node v12.14.0 und wahrscheinlich auch unter Windows0 Stimmen
Eine weitere Möglichkeit:
powershell "Sleep 3"