web-dev-qa-db-fra.com

Une meilleure façon d'attendre quelques secondes dans un fichier bat?

Duplicata possible:
Comment dormir dans un fichier batch?

Voici une façon haxxorish de faire une pause d'une seconde dans un fichier batch:

PING 400.500.600.700 > NUL

J'ai googlé mais je ne suis pas sûr qu'il y en ait de meilleures .. des idées? :)

12
Srekel

Vous pouvez utiliser les options "choix par défaut" et "délai d'attente" de la commande de choix intégrée pour créer un retard.

@echo off
echo Hi, I'm doing some stuff
echo OK, now I need to take a breather for 5 seconds...
choice /d y /t 5 > nul
echo Times up! Here I go again...
11
ThatGraemeGuy

La façon correcte de procéder consiste à utiliser la commande timeout , introduite dans Windows 2000.

Pour attendre 30 secondes:

timeout /t 30

Le délai d'attente serait interrompu si l'utilisateur appuie sur une touche; cependant, la commande accepte également le commutateur facultatif /nobreak, qui ignore efficacement tout ce sur quoi l'utilisateur peut appuyer, à l'exception d'un 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
29
Massimo
@echo off
echo It is time for liftoff.
timeout /t 5
echo Commencing crash sequence.
timeout /t 5

Le fait de frapper une clé entraînera un dépassement du compte à rebours est le seul inconvénient.

4
Aaron Lewis

Voici ce que j'utilise comme substitut de sleep.exe,

@ping -n 1 -w 1000 0.0.0.1 > NUL  

Changement -n x pour attendre (approximativement) x secondes.

3
nray

Apparemment le kit de ressources Windows contient la commande sleep. Autre Sites recommande également d'utiliser le choix .....

2
James

La commande CHOICE avec une minuterie fonctionne bien ...

CHOIX/C: x/T: x, 10> NUL

Il existe également des "programmes" que vous pouvez exécuter comme WAIT et SLEEP, etc.

J'espère que cela t'aides.

1
KPWINC

Le ping un (ci-dessus) est un bon - mais ne fonctionne que s'il est connecté à un réseau.

Un peu de script qui retardera est ci-dessous:


@Écho off

set/a secondsend =% TIME: ~ 6,2% + 10

if% secondsend% GTR 59 set/a secondsend = secondsend-60

:attends ici

si% TIME: ~ 6,2% NEQ% secondsend% goto waithere


Cela marquera une pause entre 9 et 10 secondes (la première seconde n'est pas précise en raison de l'utilisation de la commande TIME - et elle peut être à mi-chemin d'une seconde avant de commencer).

Si cela fonctionne en définissant 'secondsend' sur la seconde actuelle de l'horloge du PC, puis en y ajoutant 10 (le délai). S'il est supérieur à 59, il enlève 60 car il est bouclé à la minute suivante. Ensuite, il y a une boucle qui vérifie la seconde en cours avec 'secondsend' - une fois qu'ils correspondent au script continue.

Si vous voulez retarder d'une période différente de 2 à 59, modifiez le 10 dans la deuxième ligne (je dis 2 à 59 car la première seconde peut ne pas être une seconde complète, donc 2 pourrait être dit, 1,2 seconde par exemple).

Désolé, c'est si long, mais j'ai pensé expliquer le fonctionnement de la routine.

1
Mark H