web-dev-qa-db-fra.com

Comment attendre dans un script batch?

J'essaie d'écrire un script batch et d'attendre 10 secondes entre 2 appels de fonction. La commande:

sleep 10

Ne fait pas attendre 10 secondes le fichier batch.

J'utilise Windows XP.

Remarque: Ceci n'est pas une copie complète de Dormir dans un fichier de traitement par lots car l'autre question concerne également python, alors que il s’agit des fichiers de commandes Windows.

158
Thomaschaaf

Vous pouvez cingler une adresse qui n'existe sûrement pas et spécifier le délai d'expiration souhaité:

ping 192.0.2.2 -n 1 -w 10000 > nul

Et comme l’adresse n’existe pas, il faudra attendre 10 000 ms (10 secondes) pour revenir.

  • La partie -w 10000 spécifie le délai d'expiration souhaité en millisecondes.
  • La partie -n 1 indique à ping qu'il ne doit essayer qu'une seule fois (normalement 4 tentatives).
  • La partie > nul est ajoutée afin que la commande ping ne renvoie rien à screen.

Vous pouvez facilement créer une commande de sommeil vous-même en créant un fichier sleep.bat quelque part dans votre PATH et en utilisant la technique ci-dessus:

rem SLEEP.BAT - sleeps by the supplied number of seconds

@ping 192.0.2.2 -n 1 -w %1000 > nul

NOTE: L'adresse 192.0.2.x est réservée conformément à RFC 33 elle n'existera donc certainement pas dans le monde réel. . Citant de la spécification:

192.0.2.0/24 - Ce bloc est affecté à "TEST-NET" pour être utilisé dans la documentation et des exemples de code. Il est souvent utilisé avec les noms de domaine example.com ou example.net dans la documentation du fournisseur et du protocole. Les adresses de ce bloc ne doivent pas apparaître sur l'Internet public.

261
chakrit

Vous feriez mieux de faire un ping 127.0.0.1. Le ping Windows s'interrompt une seconde et vous permet de dormir pendant 10 secondes, utilisez

ping -n 11 127.0.0.1 > nul

De cette façon, vous n'avez pas à vous soucier des retours anticipés inattendus (par exemple, il n'y a pas d'itinéraire par défaut et le 123.45.67.89 est immédiatement reconnu comme inaccessible.)

135
Gleb

J'ai en fait trouvé la bonne commande à utiliser .. son délai d'attente appelé: http://www.ss64.com/nt/timeout.html

123
Thomaschaaf

J'ai utilisé ceci

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

Qu'en est-il de:

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

Bien, sleep existe-t-il même sur votre boîte de dialogue Windows XP? Selon ce post: http://malektips.com/xp_dos_0002.htmlsleep n'est pas disponible sous Windows XP et vous devez télécharger le Kit de ressources Windows 200 pour l'obtenir.

La réponse de Chakrit vous donne également un autre moyen de faire une pause.

Essayez d'exécuter sleep 10 à partir d'une invite de commande.

6
easel