321 votos

¿Dormir durante 5 segundos en Windows ' s de comandos? (o DOS)

De Windows de la herramienta de Recortes puede capturar la pantalla, pero a veces me quieren capturar la pantalla después de 5 segundos, tales como la toma de una imagen que se muestra por la webcam. (ejecutar el script y sonreír a la cámara, por ejemplo).

Así que en Ruby, yo podría hacer algo como

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

pero no todo el equipo ha Ruby, así que ¿cómo puedo hacer que en un archivo .bat? (algo que es ejecutable en la mayoría de los PC con la herramienta de Cortar).

El problema es que no hay ningún "sueño" utilizable en un archivo .bat.

698voto

asveikau Puntos 16871

Me sorprende mucho que nadie ha mencionado:

C:\> timeout 5

440voto

Martin Puntos 15155

Un hack que he visto es utilizar el comando ping para intentar hacer ping dirección IPno válida:

ping 1.1.1.1 -n 1 -w 3000 > nul

1.1.1.1 es una dirección IP no válida y no puede ser alcanzado.
-n 1 Sólo intente conectar una vez.
-w 3000 espere 3 segundos para contestar.
nul devoran la salida.

43voto

Adam Porad Puntos 4569

Trate de la Elección de comandos. Ha sido alrededor desde MS-dos 6.0, y debe hacer el truco.

El uso de la /T parámetro para especificar el tiempo de espera en segundos y el parámetro /D para especificar el valor predeterminado de la selección y de ignorar a continuación, selecciona opción.

La única cosa que podría ser un problema si es que el usuario tipo de la elección de los personajes antes de que el período de tiempo de espera que transcurre. Un parcial de trabajo de todo es tergiversar la situación -, el uso de la /N argumento para ocultar la lista de opciones válidas y sólo hay 1 carácter en el conjunto de opciones por lo que será menos probable que el usuario escriba una opción válida antes de que termine el tiempo de espera.

A continuación está el texto de ayuda en Windows Vista. Creo que es el mismo que en XP, pero veamos el texto de ayuda en un equipo 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."

38voto

RichAmberale Puntos 3294
rem *** HACK ALERT: Sleep for 5 seconds ***
ping -n 5 127.0.0.1 > nul
rem ***************************************

10voto

gregmac Puntos 12813

Yo estaba tratando de hacer esto desde dentro de una tarea de msbuild, y la elección y el tiempo de espera tanto no funcionó debido a redirecciones de e/S.

Terminé usando sleep.exe de http://sourceforge.net/projects/unxutils, lo cual es bueno, ya que no requiere ninguna instalación y es diminuta.


Tratando con choice:

<Target Name="TestCmd">
  <Exec Command="choice /C YN /D Y /t 5 " />
</Target>

Resultados en:

TestCmd:
  choice /C YN /D Y /t 5

EXEC : error : The file is either empty or does not contain the valid choices. [test.proj]
  [Y,N]?
C:\test.proj(5,9): error MSB3073: The command "choice /C YN /D Y /t 5 " exited with code 255.

Tratando con timeout:

<Target Name="TestCmd">
  <Exec Command="timeout /t 5 " />
</Target>

Resultados en:

TestCmd:
  timeout /t 5
EXEC : error : Input redirection is not supported, exiting the process immediately. [test.proj]
C:\test.proj(5,7): error MSB3073: The command "timeout /t 5 " exited with code 1.

A un lado:

De hecho, estoy usando <Exec Command="sleep 2 & dbghost.exe" /> porque yo soy la ejecución de dbghost.exe varias veces en paralelo y crea archivos temp/bases de datos basado en la época actual el tiempo en segundos, lo que significa que si usted comienza a varias instancias, cada uno usa el mismo nombre temporal. Yo estaba originalmente tratando de usar MSBuild Paquete de Extensión Thread.Sleep de comandos, pero parece que (por lo general) se estaba ejecutando el sueño de la tarea bien, pero luego, a partir de la <exec> tarea en todos los hilos al mismo tiempo, y por supuesto dbghost.exe podría fallar con los conflictos. Hasta ahora, el uso de sleep.exe parece ser más fiable.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X