Pregunta ¿Cómo dormir en un archivo por lotes?


¿Cómo pausar la ejecución por un tiempo en un archivo por lotes de Windows entre un comando y el siguiente?


114
2017-09-26 19:45


origen


¿Se pretende que esto sea canónico? Si es así, algún texto explicativo podría ser apropiado. - John Gardeniers
"Texto explicativo" como en? - Massimo
La mayoría, si no todas, las preguntas canónicas que he visto incluyen un texto que describe la intención de esa pregunta. - John Gardeniers
O algún texto que explique la situación ... Es principalmente para ayudar con SEO, pero también ayuda a enmarcar respuestas potenciales. - Chris S
SEO funcionando bien. Primer golpe para mí en la búsqueda de Google. - jbo5112


Respuestas:


La forma correcta de dormir en un archivo por lotes es usar el timeout comando, introducido en Windows 2000.

Esperar En algún lugar entre 29 y 30 segundos:

timeout /t 30

El tiempo de espera se interrumpiría si el usuario presiona cualquier tecla; Sin embargo, el comando también acepta el interruptor opcional. /nobreak, que efectivamente ignora cualquier cosa que el usuario pueda presionar, excepto una explícita CTRL-C:

timeout /t 30 /nobreak

Además, si no desea que el comando imprima su cuenta regresiva en la pantalla, puede redirigir su salida a NUL:

timeout /t 30 /nobreak > NUL

173
2017-09-26 19:45



El comando de tiempo de espera no funciona con Windows XP, incluso con el kit de recursos de 2003 instalado y el comando de suspensión no funciona en Windows 7, por lo que el comando ping aún puede ser útil si está utilizando el archivo por lotes en Win7 y WinXP.
el tiempo de espera no funciona en secuencias de comandos no interactivas: "ERROR: la redirección de entrada no es compatible, y el proceso se cierra de inmediato". así que a veces es preferible usar hackear con "ping". - iMysak


Como se aplica aquí, también copiaré mi respuesta de otro sitio.

Si quieres usar ping, hay una mejor manera. Querrá hacer ping a una dirección que no existe, por lo que puede especificar un tiempo de espera con una precisión de milisegundos. Afortunadamente, dicha dirección se define en un estándar (RFC 3330), y es 192.0.2.x. Esto no está inventado, realmente es una dirección con el único propósito de no existir (puede que no sea claro, pero se aplica incluso en redes locales):

192.0.2.0/24 - Este bloque se asigna como "TEST-NET" para su uso en      Documentación y código de ejemplo. Se utiliza a menudo en conjunción con      nombres de dominio example.com o example.net en proveedor y protocolo      documentación. Las direcciones dentro de este bloque no deben aparecer en la      Internet pública.

Para dormir durante 123 milisegundos, use ping 192.0.2.1 -n 1 -w 123 >nul


8
2017-07-17 10:58



Por favor no hagas eso, incluso si es ligeramente Mejor que hacer ping a una dirección real. Ping es simplemente el incorrecto Herramienta para el trabajo. - Massimo
@Massimo es muy probable que no sea lo que estaba destinado a hacer :) Pero creo que todavía es una buena solución: funciona mejor que el tiempo de espera en algunos escenarios (en particular, una resolución más alta). Además, es bastante conocido, por lo que la mayoría de las personas no se sorprenderían (es decir, se confundirían) cuando lo vean en su archivo por lotes. - mafu
Este QA fue creado exactamente para señalar la solución correcta al problema, porque hay varias otras preguntas similares que fueron respondidas con "solo use ping" o kludges similares. - Massimo
@Massimo ¡Muy bien! Supongo que solo tenemos diferentes puntos de vista. Si no te importa, todavía dejaré esta respuesta ya que parece ser mejor que hacer ping al localhost n como se describe con más frecuencia. - mafu
timeout es la solución correcta para los sistemas operativos en los que trabaja. ping es la única solución que funciona de 5.1-6.3. Con el 25% de los sistemas aún en 5.1, el tiempo de espera no es "la forma correcta". - Wyrmwood


También puede insertar un ping a localhost. Esto tardará 4 segundos en completarse (por defecto). Algunos lo consideran un problema, pero de todos modos funciona bastante bien.

El comando:
    ping 127.0.0.1


5
2017-09-26 20:10



Ehm ... todo el propósito de este Q / A era exactamente para corregir otras dos preguntas que tienen esto como su respuesta aceptada, pero que ya no se pueden corregir porque su OP ya no existe. - Massimo
Si bien funcionará, es equivalente a pasar un tornillo con un martillo. Una herramienta incorrecta puede funcionar, pero sigue siendo incorrecta. - voretaq7
@MarkAllen En otras palabras, Windows NT4, 95, 98, ME y anteriores? - Chris McKeown
@MarkAllen: técnicamente, entonces tienes que preocuparte por si o no ping viene con su sistema operativo. Si está lo suficientemente preocupado por '95 '98 o ME, entonces debería estar igualmente preocupado por 6.22 que no tiene ping ya sea - Mark Henderson♦
@MarkHenderson Es más fácil (para mí) recordar si una versión particular del sistema operativo es compatible con TCP / IP que recordar si incluye o no un comando que no había escuchado anteriormente. ¿Ya sabes? - Mark Allen