Question Comment dormir pendant 5 secondes dans l'invite de commande de Windows? (ou DOS) [dupliquer]


Cette question a déjà une réponse ici:

L'outil Snipping de Windows peut capturer l'écran, mais parfois je veux capturer l'écran après 5 secondes, comme prendre une image affichée par la webcam. (exécutez le script et souriez à la caméra, par exemple).

Donc, en Ruby, je pourrais faire quelque chose comme

sleep 3
system('c:/windows/system32/SnippingTool.exe')

mais pas tous les ordinateurs ont Ruby, alors comment faire dans un fichier .bat? (quelque chose qui est exécutable sur la plupart des PC avec l'outil Snipping).

Le problème est qu'il n'y a pas de "sleep" utilisable dans un fichier .bat.


555
2017-11-04 08:13


origine


Réponses:


Un piratage que j'ai vu est de (mal) utiliser la commande ping:

ping 127.0.0.1 -n 6 > nul

127.0.0.1 est l'adresse IP de l'hôte local.
-n 6 - il y a un délai de 1s entre chaque ping, donc pour un retard de 5s vous devez faire 6 pings.
> nul - supprimer la sortie.


702
2017-11-04 08:20



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

C:\> timeout 5

N.B. S'il vous plaît noter cependant (merci Dan!) Que timeout 5 veux dire:

Dormir n'importe où entre 4 et 5 secondes

Cela peut être vérifié empiriquement en mettant le suivant dans un fichier séquentiel, en l'exécutant à plusieurs reprises et en calculant les différences de temps entre le premier et le second echos:

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

1204
2017-11-04 08:29



Essaie le Choix commander. Il a été autour depuis MSDOS 6.0, et devrait faire l'affaire.

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

La seule chose qui peut poser un problème est que l'utilisateur tape l'un des caractères de choix avant la fin de la période de temporisation. Une solution partielle consiste à masquer la situation: utilisez l'argument / N pour masquer la liste des choix valides et ne disposez que d'un caractère dans l'ensemble des choix, de sorte qu'il est moins probable que l'utilisateur tape un choix valide avant le le délai expire.

Voici le texte d'aide sur Windows Vista. Je pense que c'est la même chose sur 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."

63
2018-05-05 18:48



rem *** HACK ALERT: Sleep for 5 seconds ***
ping -n 6 127.0.0.1 > nul
rem ***************************************
  • Corrigé comme expliqué par @Joey

49
2017-11-04 08:20



Vous pouvez le faire avec timeout:

Ce sera visible: timeout 5

Cela ne sera pas visible timeout 5 >nul


32
2018-03-03 16:59



Si vous avez PowerShell sur votre système, vous pouvez simplement exécuter cette commande:

powershell -command "Start-Sleep -s 5"

Editer: les gens ont soulevé un problème où le temps nécessaire au démarrage de powershell est significatif par rapport au temps que vous essayez d'attendre. Si l'exactitude du temps d'attente est importante (c.-à-d. Qu'un deuxième ou deux délais supplémentaires ne sont pas acceptables), vous pouvez utiliser cette approche:

powershell -command "$sleepUntil = [DateTime]::Parse('%date% %time%').AddSeconds(5); $sleepDuration = $sleepUntil.Subtract((get-date)).TotalMilliseconds; start-sleep -m $sleepDuration"

Cela prend le temps lorsque la commande windows a été émise, et le script powershell dort jusqu'à 5 secondes après cette heure. Donc, tant que PowerShell prend moins de temps à démarrer que votre durée de sommeil, cette approche va fonctionner (c'est environ 600ms sur ma machine).


32
2018-05-29 00:00



Ne pouvons-nous faire waitfor /T 180?

waitfor /T 180 pause se traduira par "ERREUR: délai d'attente pour 'pause'."

waitfor /T 180 pause >nul  va balayer cette "erreur" sous le tapis

le waitfor commande devrait être là dans Windows OS après Win95

Dans le passé j'ai téléchargé un exécutable nommé sleep cela fonctionnera sur la ligne de commande après l'avoir mis dans votre chemin.

Par exemple: sleep shutdown -r -f /m \\yourmachine bien que l'arrêt a maintenant -t option intégrée


26
2017-10-31 18:14



Timeout /t 1 >nul

Est comme pause dans 1 secound, vous pouvez prendre le chaulé à près de 100.000 (99.999) secounds. Si vous êtes connecté à Internet, la meilleure solution serait:

ping 1.1.1.1. -n 1 -w 1000 >nul

Lorsque vous effectuez un ping, vous comptez en millisecondes, donc une seconde serait 1000 millisecondes. Mais la commande ping est un peu incertaine, elle ne fonctionne pas de la même manière sur les machines hors-ligne. Le problème est que la machine est confuse parce qu'elle est hors ligne, et elle aimerait faire un ping sur un website/server/host/ipmais ça ne peut pas. Donc, je recommanderais le délai d'attente. Bonne chance!


22
2017-07-28 13:26