Pregunta ¿Cómo dormir durante 5 segundos en el símbolo del sistema de Windows? (o DOS) [duplicar]


Esta pregunta ya tiene una respuesta aquí:

La herramienta Recortes de Windows puede capturar la pantalla, pero a veces quiero capturar la pantalla después de 5 segundos, como tomar una imagen que muestra la cámara web. (ejecuta el script y sonríe a la cámara, por ejemplo).

En Ruby, podría hacer algo como

sleep 3
system('c:/windows/system32/SnippingTool.exe')

pero no toda la computadora tiene Ruby, entonces ¿cómo hago eso en un archivo .bat? (algo que se puede ejecutar en la mayoría de las PC con la herramienta de recorte).

El problema es que no se puede utilizar "dormir" en un archivo .bat.


555
2017-11-04 08:13


origen


Respuestas:


Un truco que he visto es (mal) usar el comando ping:

ping 127.0.0.1 -n 6 > nul

127.0.0.1 es la dirección IP del host local.
-n 6 - hay un retraso de 1 s entre cada ping, por lo que para un retraso de 5 s necesita hacer 6 ping.
> nul - suprimir la salida.


702
2017-11-04 08:20



Estoy muy sorprendido de que nadie haya mencionado:

C:\> timeout 5

nótese bien Sin embargo, tenga en cuenta (gracias Dan!) Que timeout 5 medio:

Duerme entre 4 y 5 segundos

Esto puede verificarse empíricamente poniendo lo siguiente en un archivo por lotes, ejecutándolo repetidamente y calculando las diferencias de tiempo entre el primero y el segundo echos:

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

1204
2017-11-04 08:29



Prueba el Elección mando. Ha existido desde MSDOS 6.0, y debería hacer el truco.

Use el parámetro / T para especificar el tiempo de espera en segundos y el parámetro / D para especificar la selección predeterminada e ignore la opción seleccionada.

Lo único que podría ser un problema es si el usuario escribe uno de los caracteres de elección antes de que transcurra el tiempo de espera. Una solución parcial es ofuscar la situación: utilice el argumento / N para ocultar la lista de opciones válidas y solo tenga 1 carácter en el conjunto de opciones, por lo que será menos probable que el usuario escriba una opción válida antes del el tiempo de espera expira.

A continuación se muestra el texto de ayuda en Windows Vista. Creo que es lo mismo en XP, pero mira el texto de ayuda en una computadora XP para verificar.

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."

63
2018-05-05 18:48



rem *** HACK ALERT: Sleep for 5 seconds ***
ping -n 6 127.0.0.1 > nul
rem ***************************************
  • Solucionado como se explica por @Joey

49
2017-11-04 08:20



Puedes hacerlo con timeout:

Esto será visible: timeout 5

Esto no será visible timeout 5 >nul


32
2018-03-03 16:59



Si tienes Potencia Shell en su sistema, puede simplemente ejecutar este comando:

powershell -command "Start-Sleep -s 5"

Editar: las personas plantearon un problema en el que la cantidad de tiempo que tarda PowerShell en comenzar es significativo en comparación con el tiempo que estás tratando de esperar. Si la precisión del tiempo de espera es importante (es decir, un segundo o dos retrasos adicionales no son aceptables), puede utilizar este enfoque:

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

Esto toma el tiempo cuando se emitió el comando de Windows y el script de powershell duerme hasta 5 segundos después de ese momento. Así que mientras Powershell tome menos tiempo para comenzar que la duración de su sueño, este enfoque funcionará (está a unos 600 ms en mi máquina).


32
2018-05-29 00:00



No podemos hacer waitfor /T 180?

waitfor /T 180 pause dará como resultado "ERROR: tiempo de espera agotado esperando 'pausa'".

waitfor /T 180 pause >nul  barrerá ese "error" debajo de la alfombra

los waitfor comando debería estar allí en el sistema operativo Windows después de Win95

En el pasado, descargué un ejecutable llamado sleep eso funcionará en la línea de comando después de que lo pongas en tu camino.

Por ejemplo: sleep shutdown -r -f /m \\yourmachine aunque shutdown ahora tiene la opción -t incorporada


26
2017-10-31 18:14