Sleep Command in Windows Batch Dateien

In Windows Batch Dateien ist es machmal erforderlich, die Ausführung von Befehlen zu verzögern. In vielen Programmier- und Skriptsprachen erreicht man dies mit sleep oder wait Commands. Leider ist die Unterstützung dieser sleep und wait Befehle abhängig von der verwendeten Windows Version sehr unterschiedlich. An dieser Stelle werde ich kurz skizzieren, wie man das gewünschte Verhalten abhängig vom Betriebssystem erreichen kann.

Mit Bordmitteln

Die hier beschrieben Methoden kommen mit den Bordmitteln der Betriebssysteme aus.

Alle Windows Versionen

Unabhängig von der verwendeten Windows Version können Wartezeiten mit sekündiger Genauigkeit mit dem ping Command realisiert werden. Der Parameter -n gibt die Anzahl der auszuführenden Pings an. Der Abstand zwischen den Pings beträgt standardmäßig eine Sekunde. Über > NUL wird die Ausgabe des Befehls ins Nirvana umgeleitet und somit nicht in der Kommandozeile ausgegeben.

ping -n <N> 127.0.0.1 > NUL

<N> ist mit der gewünschten Dauer in Sekunden zu ersetzt.

Windows 95 / Windows 98 / Windows ME / Windows 2000

Hier bietet sich zusätzlich das choice Command als Lösung an. Die eigentliche Aufgabe von choice ist es dem Benutzer zu ermöglichen durch Entscheidungen (choice) den Skriptablauf zu beeinflussen. Durch Angabe einer maximalen Wartezeit über den Parameter /t kann dieser Befehl aber zweckentfremden werden.

choice /c:123 /t:<N> > NUL

<N> ist mit der gewünschten Dauer in Sekunden zu ersetzt.

Windows XP / Windows 2003 Server

Choice wurde durch das Set Command ersetzt und gehört nicht zum Lieferumfang von Windows XP und Abkömmlingen. Beschränkt man sich auf Bordmittel, bleibt hier nur die ping-basierte Variante.

Windows Vista/ Windows 7

Mit Windows Vista führte Microsoft das timeout Command ein. Das timeout Command veranlasst den Command Processor die Ausführung eines Skripts für die über den Parameter /t angegebene Zahl an Sekunden zu pausieren. Die Pause kann durch Tastendruck beendet werden. Über den Parameter /nobreak kann Tastendrücken ignoriert werden.

timeout /T <N>  > nul

<N> ist mit der gewünschten Dauer in Sekunden zu ersetzt.

Alternativ steht ab Windows Vista auch wieder choice zur Verfügung, dessen Verwendung bereits beschrieben wurde.

Mit zusätzlicher Software

Das sleep Command ist Teil der Resource Kits der jeweiligen Betriebssysteme. Mittels sleep können Wartezeiten mit sekündiger Genauigkeit realisiert werden. Das sleep Command ist wie folgt zu verwenden.

sleep <N>

<N> ist mit der gewünschten Dauer in Sekunden zu ersetzt.

Windows 98 Resource Kit – sleep .exe
ftp://ftp.microsoft.com/Services/TechNet/samples/PS/Win98/Reskit/SCRPTING/SLEEP.EXE

Windows NT 3.1 Resource Kit – sleep .exe
ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt31/i386/reskit.exe

Windows NT 3.5 Resource Kit – sleep .exe
ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt35/i386/i386.exe

Windows Server 2003 Resource Kit Tools – sleep .exe
http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en

Alternativ gibt es weitere Programme von anderen Anbietern.


Veröffentlicht von

www.mabraham.de

Kommt noch.

  • Pingback: Scripting: Batch – Ausführung verzögern « .:: Sven Bergemann ::.()

  • Danke für deinen Blogpost 🙂

  • leon

    danke wirklich sehr praktisch ich werde damit ein batch programm was einen rhytmus beept programieren

  • Marco

    Vielen Dank, hat mir wirklich sehr weitergeholfen.

  • Pingback: Programm Start Manager - inQuake Forum - mehr braucht man nicht!()

  • Geniale Zusammenstellung, es gibt kaum weitere Möglichkeiten.
    Danke für die Auflistung, welches Betriebssystem jeweils was unterstützt!

  • Pingback: [Sammelthread] XBMC - open source Mediacenter - Seite 150()

  • Frank Nord

    Beachtlich, wie kompliziert es ist unter Windows ein ’sleep‘ umzusetzen!

  • Wie ich aus deinem Beitrag ersehen kann, hast du dich redlich bemüht für die BATCH einen WAIT darzustellen. Ich kann aber mitteilen dass ein WAIT-Kommando. Zu finden bei den DOS-Tools auf meiner WEB-Seite http://home.arcor.de/hdsoft/tools.htm

  • Niwo

    Mann mann mann. Wie mich das aufregt, das ms in jeder neuen Windows version grundsätzlich alles verändert. Bei linux gibt es seit eh und je den sleep command und die gleiche Verzeichnis Struktur. Aber danke für die workarounds. Ich wollte nur eine batch Scheiben um eine log Datei anzuzeigen. Aber ohne sleep ist das kaum möglich. Warum ist es mit Windows nur immer so kompliziert ?

  • pr0pag4nda

    Danke!
    Das mit dem Ping ist Top!
    Jedoch sollte erwähnt werden, dass man immer eine Sekunde mehr hinschreiben muss, als er warten soll. Also für 10 Sekunden „Sleep ping -n 11…“
    Habs mit ner Stoppuhr gemessen, bei mir hat er immer eine Sekunde weniger gewartet als angegeben!

  • blubber

    „ping -n 5“ macht nicht 5 Sekunden, sondern wie oft der Ping wiederholt wird! Wie lange ein einzelner Ping dauert hängt davon ab, wie lange man dem Ping Zeit gibt, falls er nicht antwortet. (Fall er antwortet kann es aus ratzfatz durch sein).

    Der Befehel „ping -n 10 -ttl 1000 non-existant-host“ dauert exakt 10 Sekunden, weil 10 mal ein nicht-existenter host gepingt wird und jedesmal 1000 ms gewartet wird.

  • Nick

    Herzlichen Dank !
    Hat mir sehr weiter geholfen.