870 Stimmen

Wie man in einer Batch-Datei/cmd fünf Sekunden lang schlafen kann

Das Snipping-Tool von Windows kann den Bildschirm erfassen, aber manchmal möchte ich den Bildschirm nach fünf Sekunden erfassen, z. B. um ein Bild aufzunehmen, das von der Webcam angezeigt wird (führen Sie das Skript aus und lächeln Sie in die Kamera, zum Beispiel).

Wie kann ich in einer Batch-Datei 5 Sekunden lang schlafen?

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.

1789voto

asveikau Punkte 37340

Ich bin sehr überrascht, dass das noch niemand erwähnt hat:

C:\> timeout 5

N.B.. Bitte beachten Sie jedoch (danke Dan!), dass timeout 5 bedeutet:

Schlaf zwischen 4 und 5 Sekunden

Dies kann empirisch überprüft werden, indem man die folgende Datei in eine Batch-Datei einfügt, sie wiederholt ausführt und die Zeitdifferenzen zwischen dem ersten und zweiten Mal berechnet echo s:

@echo off
echo %time%
timeout 5 > NUL
echo %time%

995voto

Martin Punkte 37931

Eine Möglichkeit besteht darin, den Ping-Befehl (falsch) zu verwenden:

ping 127.0.0.1 -n 6 > nul

Erläuterung:

  • ping ist ein Systemdienstprogramm, das Ping-Anfragen sendet. ping ist für alle Versionen von Windows verfügbar.
  • 127.0.0.1 ist die IP-Adresse von localhost . Diese IP-Adresse wird garantiert immer aufgelöst, ist erreichbar und reagiert sofort auf Pings.
  • -n 6 gibt an, dass es 6 Pings geben soll. Zwischen den einzelnen Pings liegt eine Verzögerung von 1s, so dass bei einer Verzögerung von 5s 6 Pings gesendet werden müssen.
  • > nul unterdrücken die Ausgabe von ping von Umleitung es zu nul .

92voto

noctonura Punkte 12103

Der folgende Hack lässt dich für 5 Sekunden schlafen

ping -n 6 127.0.0.1 > nul

Da ping eine Sekunde zwischen den Pings wartet, müssen Sie eine mehr angeben, als Sie benötigen.

81voto

Adam Porad Punkte 13624

Versuchen Sie die Auswahl Befehl. Diesen Befehl gibt es seit MSDOS 6.0, und er sollte den Zweck erfüllen.

Verwenden Sie den Parameter /T, um die Zeitüberschreitung in Sekunden anzugeben, und den Parameter /D, um die Standardauswahl anzugeben und die dann gewählte Auswahl zu ignorieren.

Ein Problem könnte entstehen, wenn der Benutzer eines der Auswahlzeichen eingibt, bevor die Timeout-Zeit abgelaufen ist. Eine teilweise Umgehung besteht darin, die Situation zu verschleiern - verwenden Sie das Argument /N, um die Liste der gültigen Auswahlmöglichkeiten auszublenden und nur 1 Zeichen in der Auswahlmenge zu haben, damit es weniger wahrscheinlich ist, dass der Benutzer eine gültige Auswahl vor Ablauf der Zeitüberschreitung eingibt.

Nachfolgend finden Sie den Hilfetext zu Windows Vista. Ich glaube, es ist dasselbe unter XP, aber sehen Sie sich den Hilfetext auf einem XP-Computer an, um das zu überprüfen.

C:\>CHOICE /?

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

Description:
    This tool allows users to select one item from a list
    of choices and returns the index of the selected choice.

Parameter List:
   /C    choices       Specifies the list of choices to be created.
                       Default list is "YN".

   /N                  Hides the list of choices in the prompt.
                       The message before the prompt is displayed
                       and the choices are still enabled.

   /CS                 Enables case-sensitive choices to be selected.
                       By default, the utility is case-insensitive.

   /T    timeout       The number of seconds to pause before a default
                       choice is made. Acceptable values are from 0 to
                       9999. If 0 is specified, there will be no pause
                       and the default choice is selected.

   /D    choice        Specifies the default choice after nnnn seconds.
                       Character must be in the set of choices specified
                       by /C option and must also specify nnnn with /T.

   /M    text          Specifies the message to be displayed before
                       the prompt. If not specified, the utility
                       displays only a prompt.

   /?                  Displays this help message.

   NOTE:
   The ERRORLEVEL environment variable is set to the index of the
   key that was selected from the set of choices. The first choice
   listed returns a value of 1, the second a value of 2, and so on.
   If the user presses a key that is not a valid choice, the tool
   sounds a warning beep. If tool detects an error condition,
   it returns an ERRORLEVEL value of 255. If the user presses
   CTRL+BREAK or CTRL+C, the tool returns an ERRORLEVEL value
   of 0. When you use ERRORLEVEL parameters in a batch program, list
   them in decreasing order.

Examples:
   CHOICE /?
   CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "Select a for option 1 and b for option 2."
   CHOICE /C ab /N /M "Select a for option 1 and b for option 2."

59voto

Niall Connaughton Punkte 14559

Wenn Sie eine PowerShell auf Ihrem System haben, können Sie einfach diesen Befehl ausführen:

powershell -command "Start-Sleep -s 5"

Bearbeiten: Es wurde ein Problem angesprochen, bei dem die Zeit, die Powershell zum Starten benötigt, im Vergleich zu der Zeit, auf die man zu warten versucht, erheblich ist. Wenn die Genauigkeit der Wartezeit wichtig ist (d.h. eine oder zwei Sekunden zusätzliche Verzögerung sind nicht akzeptabel), können Sie diesen Ansatz verwenden:

powershell -command "$sleepUntil = [DateTime]::Parse('%date% %time%').AddSeconds(5); $sleepDuration = $sleepUntil.Subtract((get-date)).TotalMilliseconds; start-sleep -m $sleepDuration"

Dabei wird die Zeit genommen, zu der der Windows-Befehl ausgegeben wurde, und das Powershell-Skript schläft bis 5 Sekunden nach dieser Zeit. Solange die Powershell weniger Zeit zum Starten benötigt als die Dauer des Ruhezustands, funktioniert dieser Ansatz (auf meinem Rechner sind es etwa 600 ms).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X