Comment dormir 5 secondes dans L'invite de commande de Windows? (ou DOS) [duplicate]

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

  • comment attendre dans un script batch? [duplicate] 6 réponses

L'outil de découpage 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écuter le script et sourire à la caméra, par exemple).

donc en Ruby, je pourrais faire quelque chose comme

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

mais tous les ordinateurs N'ont pas de rubis, alors comment je fais ça en a.le dossier bat? (quelque chose qui est exécutable sur la plupart des PC avec outil de flexion).

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

572
demandé sur 太極者無極而生 2009-11-04 11:13:31

30 réponses

un hack que j'ai vu est d'utiliser (mis)la commande ping:

ping 127.0.0.1 -n 6 > nul

127.0.0.1 est l'adresse IP locale.

-n 6 - il y a un délai de 1s entre chaque ping, donc pour un délai de 5s vous devez faire 6 pings.

> nul - supprimez la sortie.

718
répondu Martin 2018-01-30 17:35:56

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 signifie:

dormir entre 4 et 5 secondes

cela peut être vérifié empiriquement en mettant ce qui suit dans un fichier batch, en l'exécutant à plusieurs reprises et en calculant les différences de temps entre le premier et le deuxième echo s:

@echo off
echo %time%
timeout 5 > NUL
echo %time%
1230
répondu asveikau 2015-01-30 00:22:53

essayez la commande Choice . Elle existe depuis MSDOS 6.0, et devrait faire l'affaire.

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

La seule chose qui pourrait être un problème si l'utilisateur tape l'un des choix les caractères avant le délai est écoulé. Une solution partielle est d'obscurcir la situation -- utilisez l'argument / N Pour masquer la liste des choix valides et avoir seulement 1 caractère dans l'ensemble des choix de sorte qu'il sera moins probable que l'utilisateur Tapera un choix valide avant que le délai expire.

ci-dessous est 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
répondu Adam Porad 2010-05-05 18:48:41
rem *** HACK ALERT: Sleep for 5 seconds ***
ping -n 6 127.0.0.1 > nul
rem ***************************************
  • fixé comme expliqué par @Joey
48
répondu noctonura 2016-01-04 22:37:30

vous pouvez le faire avec timeout :

ce sera visible: timeout 5

ce ne sera pas visible timeout 5 >nul

31
répondu Alex 2014-03-03 16:59:22

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

powershell -command "Start-Sleep -s 5"

Edit: les gens ont soulevé une question où le temps de powershell prend pour commencer est importante par rapport à combien de temps vous essayez d'attendre. Si l'exactitude du temps d'attente est importante (c.-à-d. qu'un 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"

This prend le temps où la commande windows a été émise, et le script powershell dort jusqu'à 5 secondes après ce temps. Aussi longtemps que powershell prend moins de temps à démarrer que votre durée de sommeil, cette approche fonctionnera (c'est environ 600m sur ma machine).

31
répondu Niall Connaughton 2014-07-18 01:16:39

ne peut-on pas faire waitfor /T 180 ?

waitfor /T 180 pause résultera en" erreur: chronométré en attente de 'pause'."

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

la commande waitfor doit être présente dans Windows OS après Win95

dans le passé, j'ai téléchargé un exécutable nommé sleep qui fonctionnera sur la ligne de commande après que vous l'ayez mis sur votre chemin.

pour exemple: sleep shutdown -r -f /m \yourmachine bien que shutdown ait maintenant l'option-t intégrée dans

26
répondu joe li 2015-11-05 19:03:41

Timeout /t 1 >nul

est comme pause dans 1 seconde, vous pouvez prendre la limousine à presque 100.000 (99.999) secondes. Si vous êtes connecté à internet, la meilleure solution serait:

ping 1.1.1.1. -n 1 -w 1000 >nul

quand vous ping vous comptez en millisecondes, donc une seconde serait de 1000 millisecondes. Mais la commande ping est un peu difficile, elle ne fonctionne pas de la même façon sur les machines hors ligne. Le problème est que la machine devient confus parce qu'il est déconnecté, et il voudrait ping un website/server/host/ip , mais il ne peut pas. Donc je vous conseille de délai d'attente. Bonne chance!

21
répondu Jonathan 2016-11-03 18:46:03

SLEEP 5 a été inclus dans certaines des trousses de ressources de Windows.

TIMEOUT 5 était inclus dans certains kits de ressources Windows, mais est maintenant une commande standard dans Windows 7 et 8 (Pas sûr de Vista).

PING 1.1.1.1 -n 1 -w 5000 >NUL pour toute version MS-DOS ou Windows avec un client TCP/IP, PING peut être utilisé pour retarder l'exécution pendant un certain nombre de secondes.

NETSH badcommand (Windows XP/Server 2003 Seulement) ou CHOICE

ce lien vous aidera plus .

15
répondu Amir 2016-03-04 15:54:33

j'essayais de le faire à partir d'une tâche msbuild, et choice et timeout n'ont pas fonctionné à cause de la redirection d'e/s.

j'ai fini par dormir.exe de http://sourceforge.net/projects/unxutils , ce qui est agréable parce qu'il ne nécessite pas d'installation et il est minuscule.


d'Essayer choice :

<Target Name="TestCmd">
  <Exec Command="choice /C YN /D Y /t 5 " />
</Target>

résultats dans:

TestCmd:
  choice /C YN /D Y /t 5

EXEC : error : The file is either empty or does not contain the valid choices. [test.proj]
  [Y,N]?
C:\test.proj(5,9): error MSB3073: The command "choice /C YN /D Y /t 5 " exited with code 255.

d'Essayer timeout :

<Target Name="TestCmd">
  <Exec Command="timeout /t 5 " />
</Target>

résultats dans:

TestCmd:
  timeout /t 5
EXEC : error : Input redirection is not supported, exiting the process immediately. [test.proj]
C:\test.proj(5,7): error MSB3073: The command "timeout /t 5 " exited with code 1.

mis à part:

j'utilise en fait <Exec Command="sleep 2 & dbghost.exe" /> parce que j'exécute dbghost.exe plusieurs fois en parallèle et il crée des fichiers/bases de données temp basées sur le temps d'époque actuel en secondes - ce qui signifie Bien sûr que si vous démarrez plusieurs instances, chacune utilise le même nom temp. J'ai été à l'origine, j'ai essayé d'utiliser la commande MSBuild Extension Pack Thread.Sleep , mais il semble que (Habituellement) il exécutait la tâche de sommeil fine, mais alors en commençant la tâche <exec> dans tous les threads en même temps, et bien sûr dbghost.exe échouerait avec les conflits. Jusqu'à présent, à l'aide de sommeil.exe semble être plus fiable.

10
répondu gregmac 2012-11-05 21:01:09

deux réponses:

tout D'abord, pour retarder dans un fichier batch, simplement sans toutes les méthodes obtuses que les gens ont proposé:

timeout /t <TimeoutInSeconds> [/nobreak] 

http://technet.microsoft.com/en-us/library/cc754891.aspx

deuxièmement, il est important de mentionner que bien qu'il ne fasse pas exactement ce que vous voulez, en utilisant L'outil intégré Windows snipping, vous pouvez déclencher une coupure sans utiliser la souris. Exécuter la capture outil, échapper à la prise de courant, mais laisser l'outil en cours d'exécution, et appuyez sur Contrôle + Imprimer L'écran lorsque vous voulez que la prise de courant se produire. Cela ne devrait pas interférer avec ce que vous essayez de couper.

9
répondu Ned Martin 2014-07-12 02:03:53

C'est la dernière version de ce que j'utilise dans la pratique pendant une pause de dix secondes pour voir la sortie quand un script se termine.

BEST>@echo done
BEST>@set DelayInSeconds=10
BEST>@rem Use ping to wait
BEST>@ping 192.0.2.0 -n 1 -w %DelayInSeconds%000 > nul

L'écho fait me permet de voir quand le script terminé et le ping fournit le retard. Les signes "extra" signifient que je vois le texte" fait " et l'attente se produit sans que je sois distrait par leurs commandes.

j'ai essayé les différentes solutions données ici sur une machine XP, puisque l'idée était pour avoir un fichier batch qui fonctionnerait sur une variété de machines, et donc j'ai choisi la machine XP comme l'environnement susceptible d'être le moins capable.

GOOD> ping 192.0.2.0 -n 1 -w 3000 > nul

cela a semblé donner un délai de trois secondes comme prévu. Une tentative de ping d'une durée spécifiée de 3 secondes.

BAD> ping -n 5 192.0.2.0 > nul

cela a pris environ 10 Secondes (pas 5). Mon explication est qu'il y a 5 tentatives de ping, chacune à environ une seconde d'intervalle, faisant 4 secondes. Et chaque tentative de ping probablement a duré environ une seconde, soit un total estimé à 9 secondes.

BAD> timeout 5
BAD> sleep /w2000
BAD> waitfor /T 180
BAD> choice
Les commandes

ne sont pas disponibles.

BAD> ping 192.0.2.0 -n 1 -w 10000 > nul :: wait 10000 milliseconds, ie 10 secs

j'ai essayé aussi ci-dessus, après avoir lu que des commentaires pouvaient être ajoutés aux Fichiers BAT en utilisant deux colonnes consécutives. Cependant, le logiciel est revenu presque instantanément. Mettre le commentaire sur sa propre ligne avant le ping a bien fonctionné.

GOOD> :: wait 10000 milliseconds, ie 10 secs
GOOD> ping 192.0.2.0 -n 1 -w 10000 > nul

pour mieux comprendre ce que fait ping dans la pratique, j'ai couru

ping 192.0.2.0 -n 5 -w 5000

cela a pris environ 30 secondes, même si 5*5=25. Mon explication est qu'il y a 5 tentatives de ping chacune d'une durée de 5 secondes, mais il y a environ un délai d'une seconde entre les tentatives de ping: il y a après tout peu de raison de s'attendre à un résultat différent si vous ping à nouveau immédiatement et il est préférable de donner à un réseau un peu de temps pour se remettre de quelque problème qu'il a eu.

Edit: volé un autre post , .. RFC 3330 dit l'adresse IP 192.0.2.0 ne doit pas apparaître sur l'internet, donc pinging cette adresse empêche ces tests spamming n'importe qui! J'ai modifié le texte ci-dessus en conséquence!

5
répondu user3070485 2017-11-20 14:09:11

vous pouvez utiliser VBScript , par exemple, fichier myscript.vbs :

set wsobject = wscript.createobject("wscript.shell")

do while 1=1
    wsobject.run "SnippingTool.exe",0,TRUE
    wscript.sleep 3000
loop

fichier de lots:

cscript myscript.vbs %1
4
répondu Dani 2013-07-24 08:44:34

j'ai fait ça. Il fonctionne et montre le temps laissé en quelques secondes. Si vous voulez l'utiliser, ajoutez à un fichier batch:

call wait 10

ça marchait quand je l'ai testé.

Liste de wait.bat (il doit être dans le répertoire de travail ou windir/system32/ ):

@echo off

set SW=00

set SW2=00

set /a Sec=%1-1

set il=00
@echo Wait %1 second
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC, SW=CC 

set /a TFIN=%TBASE%+%100

:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, 

CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC,  SW2=CC


if %SW2% neq %SW% goto notype
if %il%==0 (echo Left %Sec% second & set /a Sec=sec-1 & set /a il=il+1)
goto no0
:notype
set /a il=0
:no0

if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
4
répondu user1884308 2013-07-24 08:50:32

deux autres façons qui devraient fonctionner sur TOUT DE XP et au-dessus:

avec w32tm

w32tm /stripchart /computer:localhost /period:5 /dataonly /samples:2  1>nul 

avec typeperf:

typeperf "\System\Processor Queue Length" -si 5 -sc 1 >nul
4
répondu npocmaka 2015-10-22 16:48:48

en utilisant" ping " le-n déterminera le temps d'arrêt seulement quand il n'y a pas de réponse au ping. Consultez ce post sur la mise en œuvre de DELAY en tant que fichier batch.

commande de délai mise en œuvre en tant que fichier de lot

je pourrais simplement copier-coller les bits importants, mais l'ensemble du post est très utile.

3
répondu Nikos Steiakakis 2009-11-04 08:27:08

une amélioration du code proposé par L'utilisateur Aacini, il a une résolution de centièmes de seconde et n'échoue pas lorsque le temps atteint 23: 59:59,99:

for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TBASE=((HH*60+MM)*60+SS)*100+CC

:: Example delay 1 seg.
set /a TFIN=%TBASE%+100

:ESPERAR
for /f "tokens=1,2,3,4 delims=:," %%A in ("%TIME%") do set /a HH=%%A, MM=1%%B-100, SS=1%%C-100, CC=1%%D-100, TACTUAL=((HH*60+MM)*60+SS)*100+CC

if %TACTUAL% lss %TBASE% set /a TACTUAL=%TBASE%+%TACTUAL%
if %TACTUAL% lss %TFIN% goto ESPERAR
3
répondu Rober 2012-11-04 19:14:02

j'utilise la méthode suivante entièrement basée sur les capacités de Windows XP pour faire un retard dans un fichier de lot:

retard de fichier.MTD

@ECHO OFF
REM DELAY seconds

REM GET ENDING SECOND
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100,     S=1%%C%%100, ENDING=(H*60+M)*60+S+%1

REM WAIT FOR SUCH A SECOND
:WAIT
FOR /F "TOKENS=1-3 DELIMS=:." %%A IN ("%TIME%") DO SET /A H=%%A, M=1%%B%%100, S=1%%C%%100, CURRENT=(H*60+M)*60+S
IF %CURRENT% LSS %ENDING% GOTO WAIT

vous pouvez également insérer le jour dans le calcul de sorte que la méthode fonctionne également lorsque l'intervalle de retard dépasse minuit.

3
répondu Aacini 2013-07-24 08:48:41

la façon la plus facile de le faire était celle-ci:

Téléchargez le sommeil.exe à http://www.sleepcmd.com / . Le. exe fichier doit être dans le même dossier que le programme que vous avez écrit!

3
répondu Xavi 2013-07-24 08:51:24

cela peut être fait avec deux lignes simples dans un fichier batch: écrire un fichier .vbs temporaire dans le dossier %temp% et l'appeler:

echo WScript.Sleep(5000) >"%temp%\sleep.vbs"
cscript "%temp%\sleep.vbs"
3
répondu AjV Jsy 2013-07-24 08:53:59

si vous avez une version appropriée de Windows et le Windows Server 2003 Resource Kit Tools , il inclut une commande de veille pour les programmes par lots. Pour en savoir plus: http://malektips.com/xp_dos_0002.html

2
répondu GreenMatt 2010-05-05 19:06:16
PING -n 60 127.0.0.1>nul

dans le cas où votre adaptateur LAN n'est pas disponible.

2
répondu user3584216 2014-04-29 07:35:57

dans Windows XP sp3 vous pouvez utiliser la commande sleep

1
répondu Andres 2014-06-27 18:16:19

faites un fichier cmd appelé sleep.cmd:

REM Usage: SLEEP Time_in_MiliSECONDS
@ECHO off
ping 1.0.0.0 -n 1 -w %1 > nul

Copiez sommeil.cmd à c:\windows\system32

Utilisation:

sleep 500

dort pendant 0,5 seconde. Arguments dans ms. Une fois copié sur System32, il peut être utilisé partout.

éditer: vous devriez également être loin que si la machine n'est pas connecté à un réseau (disons un portable que votre utilisation dans le métro), le tour de ping ne fonctionne plus vraiment.

1
répondu thebunnyrules 2017-05-30 18:35:19

Eh bien cela fonctionne si vous avez le choix ou ping.

@echo off
echo.
if "%1"=="" goto askq
if "%1"=="/?" goto help
if /i "%1"=="/h" goto help
if %1 GTR 0 if %1 LEQ 9999 if /i "%2"=="/q" set ans1=%1& goto quiet
if %1 GTR 0 if %1 LEQ 9999 set ans1=%1& goto breakout
if %1 LEQ 0 echo %1 is not a valid number & goto help
if not "%1"=="" echo.&echo "%1" is a bad parameter & goto help
goto end

:help
echo SLEEP runs interactively (by itself) or with parameters (sleep # /q )
echo where # is in seconds, ranges from 1 - 9999
echo Use optional parameter /q to suppress standard output 
echo or type /h or /? for this help file
echo.
goto end

:askq
set /p ans1=How many seconds to sleep? ^<1-9999^> 
echo.
if "%ans1%"=="" goto askq
if %ans1% GTR 0 if %ans1% LEQ 9999 goto breakout
goto askq

:quiet
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
goto end

:breakout
choice /n /t %ans1% /d n > nul
if errorlevel 1 ping 1.1.1.1 -n 1 -w %ans1%000 > nul
echo Slept %ans1% second^(s^)
echo.

:end

dis-moi juste s'il dort.cmd ou sommeil.chauve-souris et l'exécuter

0
répondu Doctor DOS 2012-04-19 21:10:40

ping attend environ 5 secondes avant de chronométrer, pas 1 seconde comme indiqué ci-dessus. C'est-à-dire, à moins que vous dire il à attendre seulement 1 seconde avant de chronométrer.

ping 1.0.0.1-n 1-w 1000

va ping une fois, attendre seulement 1 seconde (1000 ms) pour une réponse, puis time out.

donc un approximativement délai de 20 secondes serait:

ping 1.0.0.1-n 20-w 1000

0
répondu LionelGoulet 2016-01-26 23:45:33

j'ai écrit un programme powerbasic attendez.exe , où vous lui passez un paramètre milliseconde dans votre fichier de lots

wait 3000
system('c:/windows/system32/SnippingTool.exe')

le code pour le EXE:

FUNCTION PBMAIN()
  c$ = Command$
  s! = Val(c$)*1000
  Sleep s!         
END FUNCTION
0
répondu Shawn 2017-06-06 15:35:26

sur les nouvelles versions de Windows OS vous pouvez utiliser la commande

sleep /w2000

dans un script DOS ( .cmd ou .bat ) pour attendre 2s (2000 ms - remplacer le temps dans ms dont vous avez besoin). Faites attention à inclure l'argument /w - sans lui, tout l'ordinateur est endormi! Vous pouvez utiliser -m au lieu de /m si vous le souhaitez et optionnellement deux points (:) entre le w et le nombre.

-1
répondu jon 2013-05-15 10:06:53

Cela devrait faire l'affaire: choix / T 5 / N / D Y

remplacez le 5 par le temps en secondes que vous voulez attendre...

-2
répondu Smits 2013-12-09 11:34:56

je pense que la commande suivante peut aider:

pause 5

La syntaxe de la commande pause est: pause d \ \ où d représente la durée en secondes

J'utilise Windows 7 (32 bits), mais je ne sais pas pour les autres.

-3
répondu Srijan Acharya 2013-03-17 17:43:44