Question Comment dormir dans un fichier batch?


Comment suspendre temporairement l'exécution d'un fichier batch Windows entre une commande et la suivante?


114
2017-09-26 19:45


origine


Est-ce que cela est destiné à devenir canonique? Si tel est le cas, un texte explicatif pourrait être approprié. - John Gardeniers
"Texte explicatif" comme dans? - Massimo
La plupart des questions canoniques que j'ai vues, si ce n'est toutes, incluent un texte décrivant l'intention de cette question. - John Gardeniers
Ou un texte expliquant la situation ... Il s'agit principalement d'aider au référencement, mais aussi de cadrer les réponses potentielles. - Chris S
SEO fonctionne très bien. Premier coup pour moi sur la recherche Google. - jbo5112


Réponses:


La bonne façon de dormir dans un fichier de commandes consiste à utiliser le timeout commande, introduite dans Windows 2000.

Attendre quelque part entre 29 et 30 secondes:

timeout /t 30

Le délai d'attente serait interrompu si l'utilisateur appuyait sur une touche quelconque. cependant, la commande accepte également le commutateur optionnel /nobreak, qui ignore en réalité tout ce sur quoi l'utilisateur peut appuyer, à l'exception d'un texte explicite. CTRL-C:

timeout /t 30 /nobreak

De plus, si vous ne voulez pas que la commande affiche son compte à rebours à l'écran, vous pouvez rediriger sa sortie vers NUL:

timeout /t 30 /nobreak > NUL

173
2017-09-26 19:45



La commande timeout ne fonctionne pas avec Windows XP même avec le kit de ressources 2003 installé et la commande sleep ne fonctionne pas sous Windows 7; la commande ping peut donc toujours être utile si vous utilisez le fichier de commandes sous Win7 et WinXP.
timeout ne fonctionne pas dans les scripts non interactifs: "ERREUR: la redirection d'entrée n'est pas prise en charge, ce qui permet de quitter le processus immédiatement." donc parfois, utiliser hack avec "ping" est préférable. - iMysak


Puisqu'il s'applique ici aussi, je vais copier ma réponse d'un autre site.

Si vous voulez utiliser ping, il existe un meilleur moyen. Vous voudrez envoyer une requête ping à une adresse qui n'existe pas afin de pouvoir spécifier un délai d'attente avec une précision à la milliseconde. Heureusement, une telle adresse est définie dans une norme (RFC 3330), et il est 192.0.2.x. Ce n'est pas inventé, c'est vraiment une adresse dont le seul but est de ne pas exister (ça peut ne pas être clair, mais ça s'applique même dans les réseaux locaux):

192.0.2.0/24 - Ce bloc est affecté à "TEST-NET" pour être utilisé dans      documentation et exemple de code. Il est souvent utilisé en conjonction avec      noms de domaine example.com ou example.net chez le fournisseur et le protocole      Documentation. Les adresses de ce bloc ne doivent pas apparaître sur le      Internet public.

Pour dormir pendant 123 millisecondes, utilisez ping 192.0.2.1 -n 1 -w 123 >nul


8
2017-07-17 10:58



S'il vous plaît ne faites pas ça, même si c'est légèrement mieux que de cingler une vraie adresse. Ping est simplement le faux outil pour le travail. - Massimo
@ Massimo Ce n'est probablement pas ce à quoi il était destiné :) Mais je pense que c'est quand même une bonne solution - cela fonctionne mieux que le timeout dans certains scénarios (en particulier une résolution plus élevée). En outre, il est devenu assez bien connu, de sorte que la plupart des gens ne seraient pas très surpris (c'est-à-dire confus) lorsqu'ils le verront dans votre fichier de commandes. - mafu
Ce QA a été créé exactement pour indiquer la bonne solution au problème, car il existe plusieurs autres questions similaires auxquelles il a été répondu par "Just use ping" ou des kludges similaires. - Massimo
@ Massimo Très bien! Je suppose que nous avons juste des points de vue différents. Si cela ne vous dérange pas, je vais quand même laisser cette réponse, car elle semble être préférable à envoyer un ping à localhost n fois comme il est décrit le plus souvent. - mafu
timeout est la bonne solution pour les systèmes d'exploitation sur lesquels il fonctionne. ping est la seule solution qui fonctionne à partir de 5.1-6.3. Avec 25% des systèmes encore sous 5.1, le délai d'attente n'est pas "dans le bon sens". - Wyrmwood


Vous pouvez également insérer un ping à localhost. Cela prendra 4 secondes pour terminer (par défaut). Certains le considèrent comme un béguin, mais cela fonctionne quand même très bien.

La commande:
    ping 127.0.0.1


5
2017-09-26 20:10



Ehm ... le but de cette Q / A était exactement pour corriger deux autres questions qui ont ceci comme réponse acceptée, mais ne peuvent plus être corrigées car leur PO n'est plus là. - Massimo
Bien que cela fonctionne, cela équivaut à enfoncer une vis avec un marteau. Un mauvais outil peut fonctionner, mais il est toujours faux. - voretaq7
@ MarkAllen En d'autres termes, Windows NT4, 95, 98, ME et plus ancien? - Chris McKeown
@MarkAllen - techniquement, vous devez alors vous préoccuper de savoir si ping vient avec votre OS. Si vous êtes assez inquiet à propos de '95 '98 ou ME, vous devriez être aussi inquiet à propos de 6.22 qui n'a pas ping non plus - Mark Henderson♦
@ MarkHenderson Il est plus facile (pour moi) de se rappeler si une version particulière du système d'exploitation prend en charge TCP / IP que de se rappeler si elle inclut ou non une commande que je n'avais pas entendue auparavant. Tu sais? - Mark Allen