¿Cómo esperar en un script por lotes?

Posible duplicado:

Dormir en un archivo por lotes de DOS

Estoy tratando de escribir un script por lotes y tratar de esperar 10 segundos entre 2 llamadas a funciones. El comando:

sleep 10 

No hace que el archivo por lotes espere 10 segundos.

Estoy ejecutando Windows XP.

Nota: Este no es un duplicado completo de Dormir en un archivo por lotes, ya que la otra pregunta también trata sobre python, mientras que esto es sobre los archivos de Windows por lotes.

Puede hacer ping a una dirección que seguramente no existe y especificar el tiempo de espera deseado:

 ping 192.0.2.2 -n 1 -w 10000 > nul 

Y dado que la dirección no existe, esperará 10,000 ms (10 segundos) y regresará.

  • La parte -w 10000 especifica el tiempo de espera deseado en milisegundos.
  • La parte -n 1 le dice a ping que solo debería intentar una vez (normalmente lo intentaría 4 veces).
  • La parte > nul se agrega para que el comando ping no muestre nada en la pantalla.

Puedes hacer fácilmente un comando para dormir creando un sleep.bat en algún lugar de tu PATH y usar la técnica anterior:

 rem SLEEP.BAT - sleeps by the supplied number of seconds @ping 192.0.2.2 -n 1 -w %1000 > nul 

NOTA: La dirección 192.0.2.x está reservada según RFC 3330 por lo que definitivamente no existirá en el mundo real. Citando de la especificación:

192.0.2.0/24 – Este bloque se asigna como “TEST-NET” para su uso en documentación y código de ejemplo. A menudo se usa junto con los nombres de dominio example.com o example.net en la documentación del proveedor y del protocolo. Las direcciones dentro de este bloque no deberían aparecer en Internet público.

Será mejor que hagas ping a 127.0.0.1 . Windows ping hace una pausa de un segundo entre pings para que, si desea dormir durante 10 segundos, use

 ping -n 11 127.0.0.1 > nul 

De esta forma, no tendrá que preocuparse por los retornos anticipados inesperados (por ejemplo, no hay una ruta predeterminada y se sabe que el 123.45.67.89 es inalcanzable al instante).

De hecho, encontré el comando correcto para usar … se llama timeout: http://www.ss64.com/nt/timeout.html

Usé esto

 :top cls type G:\empty.txt type I:\empty.txt timeout /T 500 goto top 

Qué pasa:

 @echo off set wait=%1 echo waiting %wait% s echo wscript.sleep %wait%000 > wait.vbs wscript.exe wait.vbs del wait.vbs 

Bueno, ¿el sleep incluso existe en su caja de Windows XP? De acuerdo con este post: http://malektips.com/xp_dos_0002.html sleep no está disponible en Windows XP, y tienes que descargar el Kit de recursos de Windows 2003 para poder obtenerlo.

La respuesta de Chakrit te da otra forma de hacer una pausa, también.

Intenta ejecutar sleep 10 desde el símbolo del sistema.