Comment faire en sorte qu'un script batch Windows attende quelques secondes?
sleep
et wait
ne semblent pas fonctionner (commande non reconnue).
Tu peux essayer
ping -n XXX 127.0.0.1 >nul
où XXX est le nombre de secondes à attendre, plus un.
Je ne sais pas pourquoi ces commandes ne fonctionnent pas pour vous, mais vous pouvez aussi essayer timeout
timeout <delay in seconds>
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
Attendre 10 secondes:
choice /T 10 /C X /D X /N
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.
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
.
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.
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
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.
Je viens d'écrire mon propre sommeil qui s'appelle Win32fonction API de veille .
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
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 .