web-dev-qa-db-fra.com

Lot Windows: sommeil

Comment faire en sorte qu'un script batch Windows attende quelques secondes?

sleep et wait ne semblent pas fonctionner (commande non reconnue).

115
Claudiu

Tu peux essayer

ping -n XXX 127.0.0.1 >nul

où XXX est le nombre de secondes à attendre, plus un.

171
tenfour

Je ne sais pas pourquoi ces commandes ne fonctionnent pas pour vous, mais vous pouvez aussi essayer timeout

timeout <delay in seconds>
152
Jaime Soto
timeout /t 10 /nobreak > NUL

/t spécifie le temps d'attente en secondes

/nobreak n'interrompt pas le délai si vous appuyez sur une touche (sauf CTRL-C)

> NUL supprime la sortie de la commande

146
lukuluku

Attendre 10 secondes:

choice /T 10 /C X /D X /N
13
GolezTrol

Microsoft a une fonction de veille que vous pouvez appeler directement.

    Usage:  sleep      time-to-sleep-in-seconds
            sleep [-m] time-to-sleep-in-milliseconds
            sleep [-c] commited-memory ratio (1%-100%)

Vous pouvez simplement dire sleep 1 par exemple dormir pendant 1 seconde dans votre script batch.

IMO Ping est un peu un bidouillage pour ce cas d'utilisation.

13
emmax

Pour un script pur cmd.exe, vous pouvez utiliser cet élément de code qui renvoie l'heure actuelle en centièmes de secondes.

:gettime
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

Vous pouvez ensuite l'utiliser dans une boucle d'attente comme celle-ci.

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

Et assembler toutes les pièces:

@echo off
setlocal enableextensions enabledelayedexpansion

call :gettime t1
echo %t1%
call :wait %1
call :gettime t2
echo %t2%
set /A tt = (t2-t1)/100
echo %tt%
goto :eof

:wait
call :gettime wait0
:w2
call :gettime wait1
set /A waitt = wait1-wait0
if !waitt! lss %1 goto :w2
goto :eof

:gettime 
set hh=%time:~0,2%
set mm=%time:~3,2%
set ss=%time:~6,2%
set cc=%time:~-2%
set /A %1=hh*360000+mm*6000+ss*100+cc
goto :eof

Pour une description plus détaillée des commandes utilisées ici, consultez les informations HELP SET et HELP CALL.

6
PA.

Le Kit de ressources Windows 20 possède un fichier de commandes sleep. Si vous vous déplacez jusqu'à PowerShell , vous pouvez utiliser:

Start-Sleep -s <time to sleep>

Ou quelque chose comme ça.

4
wkl

Je compte sur JScript . J'ai un fichier JScript comme ceci:

// This is sleep.js
WScript.Sleep( WScript.Arguments( 0 ) );

Et à l'intérieur d'un fichier de commandes, je l'exécute avec CScript (généralement %SystemRoot%\system32\cscript.exe)

rem This is the calling inside a BAT file to wait for 5 seconds
cscript /nologo sleep.js 5000
4

Heh, Windows est euh ... intéressant. Cela marche:

choice /T 1 /d y > NUL

choice présente une invite vous demandant de répondre oui ou non. /d y le fait choisir oui. /t 1 le fait attendre une seconde avant de le saisir. > NUL écrase la sortie.

3
Claudiu

Je viens d'écrire mon propre sommeil qui s'appelle Win32fonction API de veille .

2
David Heffernan

RJLsoftware a un petit utilitaire appelé DelayExec.exe . Avec cela, vous pouvez exécuter un démarrage différé de tout programme par lots et registre Windows (le plus utile dans ... Windows /.../ Exécuter registre).

Exemple d'utilisation:

delayexec "C:\WINDOWS\system32\notepad.exe" 10

ou en tant que commande de sommeil:

delayexec "nothing" 10
1
Thomasso

Personnellement, j'utilise un Perl one-liner :

Perl -e "sleep 10;"

pour une attente de 10 secondes. Il est probable que Perl soit déjà installé sur une machine de développement dans le cadre de votre installation de git; sinon, vous devrez l'installer, par exemple, à partir de ActiveState ou Strawberry , mais c'est l'une de ces choses que j'installe de toute façon.

Vous pouvez également installer une commande de veille à partir de GnuWin32 .

1
Rup