Come aspettare in uno script batch?

Possibile duplicato:

Dormire in un file batch DOS

Sto cercando di scrivere uno script batch e provare ad attendere 10 secondi tra 2 chiamate di funzione. Il comando:

sleep 10 

Non fa attendere il file batch per 10 secondi.

Sto facendo funzionare Windows XP.

Nota: questo non è un duplicato completo di Sleeping in un file batch poiché l’altra domanda riguarda anche Python, mentre si tratta di file batch di Windows.

È ansible eseguire il ping di un indirizzo che sicuramente non esiste e specificare il timeout desiderato:

 ping 192.0.2.2 -n 1 -w 10000 > nul 

E poiché l’indirizzo non esiste, aspetterà 10.000 ms (10 secondi) e ritorna.

  • La parte -w 10000 specifica il timeout desiderato in millisecondi.
  • La parte -n 1 dice al ping che dovrebbe provare solo una volta (normalmente proverebbe 4 volte).
  • La parte > nul viene aggiunta in modo che il comando ping non generi nulla sullo schermo.

Puoi facilmente creare un comando di sonno da solo creando un sleep.bat da qualche parte nel tuo PERCORSO e utilizzare la tecnica di cui sopra:

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

NOTA: l’indirizzo 192.0.2.x è riservato come da RFC 3330, quindi sicuramente non esisterà nel mondo reale. Citando dalle specifiche:

192.0.2.0/24 – Questo blocco è assegnato come “TEST-NET” per l’uso nella documentazione e nel codice di esempio. Viene spesso utilizzato insieme ai nomi di dominio example.com o example.net nella documentazione del fornitore e del protocollo. Gli indirizzi all’interno di questo blocco non dovrebbero apparire su Internet pubblica.

Faresti meglio a ping 127.0.0.1 . Il ping di Windows si interrompe per un secondo tra i ping, quindi se si desidera dormire per 10 secondi, utilizzare

 ping -n 11 127.0.0.1 > nul 

In questo modo non devi preoccuparti di ritorni anticipati inaspettati (ad esempio, non esiste una route predefinita e il 123.45.67.89 è immediatamente noto per essere irraggiungibile.)

In realtà ho trovato il comando giusto da usare .. il suo timeout chiamato: http://www.ss64.com/nt/timeout.html

L’ho usato

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

Che dire:

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

Beh, il sleep esiste anche sulla tua scatola di Windows XP? Secondo questo post: http://malektips.com/xp_dos_0002.html il sleep non è disponibile su Windows XP e devi scaricare il Resource Kit di Windows 2003 per ottenerlo.

La risposta di Chakrit ti offre anche un altro modo per mettere in pausa.

Prova a eseguire sleep 10 da un prompt dei comandi.