856 votes

Comment mettre en veille pendant cinq secondes dans un fichier batch/cmd

L'outil Snipping de Windows peut capturer l'écran, mais il m'arrive de vouloir capturer l'écran après cinq secondes, par exemple en prenant une image affichée par la webcam (exécutez le script et souriez à la caméra, par exemple).

Comment mettre en veilleuse pendant 5 secondes dans un fichier batch ?

27 votes

Réponse rapide pour les personnes qui atterrissent ici : il existe une solution native depuis Windows Vista : TIMEOUT . Références : SS64 , Rob van der Woude .

3 votes

Il y a délai d'attente qui attend des secondes. Dans le cas où une attente de quelques millisecondes est nécessaire, la commande powershell Démarrage-Sommeil peut être utilisé. Pour dormir 50ms dans cmd : powershell Start-Sleep -m 50

0 votes

@Pavel : Vous pouvez également abuser d'un ping vers un hôte inexistant pour dormir pendant des millisecondes.

1770voto

asveikau Points 16871

Je suis très surpris que personne ne l'ait mentionné :

C:\> timeout 5

N.B. Notez cependant (merci Dan !) que timeout 5 signifie :

Dormir entre 4 et 5 secondes

Ceci peut être vérifié de manière empirique en plaçant le fichier suivant dans un fichier batch, en l'exécutant à plusieurs reprises et en calculant les différences de temps entre le premier et le second. echo s :

@echo off
echo %time%
timeout 5 > NUL
echo %time%

36 votes

'timeout' n'est pas reconnu comme une commande interne ou externe, un programme opérationnel ou un fichier batch. (Sur mon Windowx XP SP3)

101 votes

Il fonctionne sur Win 7, mais pas sur Win XP

7 votes

Je suis presque certain de l'avoir utilisé sur Server 2003 (même base de code que XP), il est donc étonnant qu'il ne soit pas sur XP...

981voto

Martin Points 15155

Une solution consiste à (mal) utiliser la commande ping :

ping 127.0.0.1 -n 6 > nul

Explication :

  • ping est un utilitaire système qui envoie des requêtes ping. ping est disponible sur toutes les versions de Windows.
  • 127.0.0.1 est l'adresse IP de localhost . Cette adresse IP est garantie comme étant toujours résolue, joignable et répondant immédiatement aux pings.
  • -n 6 spécifie qu'il doit y avoir 6 pings. Il y a un délai de 1 seconde entre chaque ping, donc pour un délai de 5 secondes, il faut envoyer 6 pings.
  • > nul supprimer la sortie de ping , par réorientation le à nul .

8 votes

Cela ne fonctionne pas bien pour moi (il pourrait s'agir d'un problème de réseau) ? Lorsque j'essaie la commande ci-dessus (sans le tuyau vers nul), j'obtiens immédiatement un "Destination host unreachable" du serveur de la passerelle et la commande ping se termine immédiatement.

131 votes

Il est plus propre et plus fiable, à mon avis, de faire "ping 127.0.0.1 -n 10 > nul" - chaque ping attend 1s, donc changez le nombre de fois pour le nombre de secondes que vous souhaitez retarder.

41 votes

Une correction - 1.1.1.1 est un texte parfaitement valable. public Adresse IP. Théoriquement, il est possible de l'atteindre. Elle est hors ligne maintenant parce que je soupçonne ses propriétaires d'avoir abandonné l'espoir de l'utiliser pour autre chose que des pings en provenance du monde entier :) Pour plus de détails sur cette IP, voir serverfault.com/a/339782 . Il est plus prudent d'utiliser 127.0.0.1 comme le suggère Cybergibbons, ou l'une des options suivantes privé qui n'existent pas dans votre réseau (par exemple 10.1.1.1, etc.).

87voto

RichAmberale Points 3294

Le hack suivant vous permet de dormir pendant 5 secondes

ping -n 6 127.0.0.1 > nul

Comme ping attend une seconde entre les pings, vous devez en spécifier un de plus que nécessaire.

36 votes

Il s'agit de -n 6 . Sinon, il suffit d'attendre 4 secondes. Rappelez-vous que ping attend 1 seconde entre Vous devez donc toujours spécifier un essai de plus que nécessaire.

5 votes

C'est une bien meilleure solution que d'envoyer un ping à une adresse IP présumée inexistante, ce qui d'ailleurs ne fonctionne pas lorsque le réseau est en panne. L'envoi d'un message à localhost fonctionne presque toujours.

0 votes

Devrait être > null si vous utilisez powershell.

80voto

Adam Porad Points 4569

Essayez le Choix commande. Elle existe depuis MSDOS 6.0 et devrait faire l'affaire.

Utilisez le paramètre /T pour spécifier le délai d'attente en secondes et le paramètre /D pour spécifier la sélection par défaut et ignorer le choix sélectionné ensuite.

La seule chose qui pourrait poser problème est que l'utilisateur tape l'un des caractères choisis avant la fin du délai d'attente. Une solution partielle consiste à obscurcir la situation - utiliser l'argument /N pour masquer la liste des choix valides et n'avoir qu'un seul caractère dans l'ensemble des choix afin qu'il soit moins probable que l'utilisateur tape un choix valide avant que le délai n'expire.

Vous trouverez ci-dessous le texte d'aide de Windows Vista. Je pense que c'est la même chose sous XP, mais regardez le texte d'aide sur un ordinateur XP pour vérifier.

C:\>CHOICE /?

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

Description:
    This tool allows users to select one item from a list
    of choices and returns the index of the selected choice.

Parameter List:
   /C    choices       Specifies the list of choices to be created.
                       Default list is "YN".

   /N                  Hides the list of choices in the prompt.
                       The message before the prompt is displayed
                       and the choices are still enabled.

   /CS                 Enables case-sensitive choices to be selected.
                       By default, the utility is case-insensitive.

   /T    timeout       The number of seconds to pause before a default
                       choice is made. Acceptable values are from 0 to
                       9999. If 0 is specified, there will be no pause
                       and the default choice is selected.

   /D    choice        Specifies the default choice after nnnn seconds.
                       Character must be in the set of choices specified
                       by /C option and must also specify nnnn with /T.

   /M    text          Specifies the message to be displayed before
                       the prompt. If not specified, the utility
                       displays only a prompt.

   /?                  Displays this help message.

   NOTE:
   The ERRORLEVEL environment variable is set to the index of the
   key that was selected from the set of choices. The first choice
   listed returns a value of 1, the second a value of 2, and so on.
   If the user presses a key that is not a valid choice, the tool
   sounds a warning beep. If tool detects an error condition,
   it returns an ERRORLEVEL value of 255. If the user presses
   CTRL+BREAK or CTRL+C, the tool returns an ERRORLEVEL value
   of 0. When you use ERRORLEVEL parameters in a batch program, list
   them in decreasing order.

Examples:
   CHOICE /?
   CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."
   CHOICE /T 10 /C ync /CS /D y
   CHOICE /C ab /M "Select a for option 1 and b for option 2."
   CHOICE /C ab /N /M "Select a for option 1 and b for option 2."

12 votes

Il ne l'est pas non plus sur XP...

15 votes

C'est intéressant. Ce site computerhope.com/choicehl.htm indique que ce choix est disponible sous Windows 95, Windows 98, Windows Vista et Windows 7, mais pas sous Windows XP. Je parie que MS a reçu beaucoup de plaintes pour l'avoir retiré de XP, alors ils l'ont remis dans Vista.

0 votes

J'utilise CHOICE sur Vista. Cela fonctionne bien.

49voto

Alex Points 61

Vous pouvez le préparer avec timeout :

Cela sera visible : timeout 5

Elle ne sera pas visible timeout 5 >nul

0 votes

timeout commande disponible dans win 7, mais pas dans win xp.

2 votes

Notez que même si elle n'est pas visible, elle sera toujours annulée si l'utilisateur appuie sur une touche, ajoutez l'option /NOBREAK pour éviter cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X