Téléchargement
illégal
Posez votre question Signaler

Faire une attente sous dos (batch)

mathhieu - Dernière réponse le 8 févr. 2012 à 04:18
Bonjour,

je voudrais insérer une ligne de temporisation entre deux lignes dans un programme .bat mais je connais pas la syntaxe, quelqu'un pourrais m'aider. Je veux faire une pause de 30 seconde et reprendre aprés

Merci
Lire la suite 

Faire une attente sous dos (batch) »

41 réponses
Réponse
+16
moins plus
Bonjour,

Alors Sleep, Wait, et Choice ne sont PAS inclus avec windows XP.
une solution est celle énoncée par Jeff :

ping -n 'nbr de seconde +1' 127.0.0.1 >nul
Ajouter un commentaire
Réponse
+7
moins plus
http://www.robvanderwoude.com/index.html (lien mort)
Nouveau lien : http://www.robvanderwoude.com/wait.php

Voir l'astuce en utilisant la commande ping, qui permet de fixer un délai en secondes... fallait y penser :-)

Webmaster(@)CommentCaMarche.net
>>010000110100001101001101<<
Ajouter un commentaire
Réponse
+7
moins plus
Une autre solution pour crée une temporisation dans un batch est d'incrémenté une variable dans une boucle avec un seuil en condition de sortie

exemple:
:boucle  
set /a count = count + 1  
if %count%==30000 goto finboucle  
goto boucle  
:finboucle 


cela fonctionne aussi, si tu veut plus d'infos regarde Publicité supprimée Modération CCM

Flox
Silence - 30 avril 2010 à 17:52
Le temps d'attente va varier en fonction de la vitesse du processeur.
Ajouter un commentaire
Réponse
+5
moins plus
Salut,

le PING ne fonctionne pas sur tous les ordinateurs
la boucle n'est pas précise pour le temps et trop variable d'un ordinateur à l'autre
j'ai donc imaginé une attente qui tient compte de l'heure système :

@echo off
set temps_pause=5
echo test de pause : le temps de pause est ici de %temps_pause% secondes
echo.
call :attente %temps_pause%
echo %temps_pause% plus tard ce message s'affiche
echo.
echo le batch va maintenant se terminer dans 10 secondes
call :attente 10
exit


:attente
call :calcultemps
set /a t1= %j1% + %h1% + %m1% + %s1% + %1
:boucleattente
call :calcultemps
set /a t2= %j1% + %h1% + %m1% + %s1%
if "%t2%" LSS "%t1%" goto boucleattente
goto :eof
:calcultemps
set /a jj="100%DATE:~0,2% %% 100"
set /a mm="100%DATE:~3,2% %% 100"
set /a aa=%DATE:~6,4%

rem ATTENTION mettre les 3 lignes suivantes séparées par 1 espace sur 1 seule ligne

set /a j1="(((1461 * (%aa% + 4800 + (%mm% - 14) / 12)) / 4 + (367 * (%mm% - 2 - 12
* ((%mm% - 14) / 12))) / 12 - (3 * ((%aa% + 4900 + (%mm% - 14) / 12) / 100)) / 4 +
%jj% - 32075) - 2455021) * 86400 "

set /a h1= %time:~0,2% * 3600
set /a m1= %time:~3,2% * 60
set s1=%time:~6,2%

c'est un peu lourd mais fiable sur toutes les machines !
loufanou - 7 déc. 2010 à 08:28
Un petit souci avec des conversions en octal pour les valeurs 08 et 09 m'a fait modifier cette procédure pour retirer le premier caractère de chaque valeur quand il s'agit d'un 0.
Mais sinon, la procédure semble fonctionner à merveille...
Ajouter un commentaire
Réponse
+3
moins plus
Mets la ligne suivante, ca fonctionne.

choice /t:o,30>nul
Ajouter un commentaire
Réponse
+3
moins plus
et choice pour winxp alors -?
jipicy- 26 janv. 2006 à 14:02
http://www.ss64.com/nt/
http://www.robvanderwoude.com/choice.html (merci Jeff)
Ajouter un commentaire
Réponse
+3
moins plus
oui c'est très bien, ça marche très bien et il existe pléthore de programmes permettant de faire une pause dont Delay, Sleep, Wait, Waitn et autres mais ils ne sont PAS inclus avec windows XP ni Vista et demandent donc de télécharger un logiciel supplémentaire dans system32 où dans le dossier d'exécution ce qui limite la portabilité d'un script à son propre ordinateur ou celui d'utilisateurs avertis.

l'objectif sans aucune prétention du précédent script (call :attente x) étant de trouver une astuce permettant de gérer ce type de pause sans appel de logiciel externe supplémentaire au package "classique".

Tu auras peut-être noté qu'il est peut-être considéré comme superflu de tenir compte du nombre de jours depuis une date, mais, même si cela crée une ligne un peu démente, ça évite une boucle infinie si l'appel de la fonction est effectué à minuit moins 2 secondes (!)

à noter aussi que chez soi, ping 127.0.0.1 -n 5 >nul , ou ping -n 1 1.1.1.1 -w 5000 >nul conviennent très bien avec un réseau "normalement configuré".

A ce jour, il semble fonctionner correctement sur des ordinateurs de générations différentes et de systèmes différents (xp 2000 vista)
librequetucrois - 29 janv. 2012 à 22:32
bonjour ; ça fonctionne si ça intéresse ; utilisez worpad.exe pour les accents et + :

=> Avec worpad.exe on peut enregistrer un fichier au format texte ms-dos (oem/ansi).

CRC32: 51E5549F
MD5: F78BD9F46E877C48C5E48DB09CB9F361
SHA-1: 3D1780F8DF5C5ADBD32B70AC573891305416C7D1
SHA-256: A3C85571AD1C080B58B64417D8971FC20E6A02BAEA8C97F7AC85F2C46A2C4B4F

test20120129-22h26.bat

@echo off

setlocal

cls
echo €a commence ...
echo.

set varadd=0
set varnombre=0

rem 0 = 00 to 15 ; 1 = 16 to 255
set vardecihexaright=0
rem 0 = 0x00 to 0x09 ; 1 = 0x10 to 0x0F
set varhexaright=0

rem 0 = 00 to 15 ; 1 = 16 to 255
set vardecihexaleft=0
rem 0 = 0x00 to 0x09 ; 1 = 0x10 to 0xFF
set varhexaleft=0

:astc
set /a varadd=%varnombre%+1
set varnombre=%varadd%
echo %varnombre%

set varnbrighthexa="%varnombre%"
if "%varnombre%" == "10" (set varnbrighthexa="A")
if "%varnombre%" == "11" (set varnbrighthexa="B")
if "%varnombre%" == "12" (set varnbrighthexa="C")
if "%varnombre%" == "13" (set varnbrighthexa="D")
if "%varnombre%" == "14" (set varnbrighthexa="E")
if "%varnombre%" == "15" (set varnbrighthexa="F")

set varnbrlefthexa="%varnombre%"
if "%varnombre%" == "10" (set varnbrlefthexa="A")
if "%varnombre%" == "11" (set varnbrlefthexa="B")
if "%varnombre%" == "12" (set varnbrlefthexa="C")
if "%varnombre%" == "13" (set varnbrlefthexa="D")
if "%varnombre%" == "14" (set varnbrlefthexa="E")
if "%varnombre%" == "15" (set varnbrlefthexa="F")

set stocknbrhexa=%varnbrlefthexa%%varnbrighthexa%
echo %stocknbrhexa%

rem ****
rem temporisation
rem http://support.microsoft.com/kb/460936/
rem http://www.commentcamarche.net/forum/affich-2047032-faire-une-attente-sous-dos-batch

set secondbegin=%time:~6,2%
set /a secondelay=%secondbegin%+1
set secondtest=%secondelay%
if "%secondtest%" == "60" (set secondtest=1)
if "%secondtest%" == "61" (set secondtest=2)
if "%secondtest%" == "62" (set secondtest=3)

:paustmp
rem pause
set secondactueltest=%time:~6,2%
rem echo %secondtest%
rem echo %secondactueltest%
if not %secondactueltest% geq %secondtest% (goto paustmp)
rem ****

if "%varnombre%" equ "15" (goto fin)
goto astc

goto answer%ERRORLEVEL%
:answer0
echo Le programme a retourné le code 0
goto suite
:answer1
echo Le programme a retourné le code 1
:suite
echo.
pause

:fin
endlocal
exit /B


C'est très difficile de trouver certaines erreurs comme un fichier echo qui bloque 'echo.'

à+ ; le but est de faire un compteur hexadécimale et + ...
librequetucrois - 1 févr. 2012 à 04:29
slt re ; infos liées, (pour plus tard ; pas testée) :

"à+ ; le but est de faire un compteur hexadécimale et + ..."

Source du lien ci-dessous :

[Batch] Fonctions utiles pour des chaînes de caractères [Trucs & Astuces] - Forum des professionnels en informatique :
http://www.developpez.net/forums/d906307/general-developpement/programmation-systeme/windows/scripts-batch/fonctions-utiles-chaines-caracteres/

lien =>

New technique: Convert dec to hex with undocumented variable - alt.msdos.batch.nt | Google Groupes :
http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/0ceeb574d4ac4baa/bdfd22b0fe20084a#bdfd22b0fe20084a

"> > Hello, I devised a quick way to convert decimal numbers to hexadecimal
> > using undocumented =ExitCode variable.

> Thank you Carlos -- this may be the tool of the year!

> Frank

Thanks Frank. About ExitCodeAscii, this is only seted when you exit
with number between 32 and 126, this return ascii character, example
if I do exit /b 90 ExitCodeAscii is 'Z'

I want to emphasize that my last version, is more fast than Timo vbs
version. Test with timethis.exe indicate that my code delay 0,078 and
timo vbs 0,109.

This is my final version:"


@echo off
call :Dec2Hex 10554896 ret
echo.%ret%
pause
goto :eof

:Dec2Hex
"%ComSpec%" /d /c exit /b %~1 >nul
for /f "eol=0 delims=0 tokens=*" %%# in (
"%=ExitCode%") do if not "%%#"=="" (
set %~2=%%#) else (set %~2=0)
goto :eof


Avec set /a on peut faire l'inverse ; de hex vers décimale (base 10) :

Le code ci-dessous convertit la valeur hexadécimale 2F5 en décimal :

set hexa=2F5
set /a valeur=0x%hexa%
echo %valeur%


Source :

FAQ Windows Batch :
http://windows.developpez.com/faq/batch/?page=fonctions-utiles#conversion-hexa-decimal

j'aurais voulu pouvoir utiliser set /a mais pour obtenir aussi un résultat en hexadécimal.

(( POC Download avec Hash+Taille => GégènBinaire | CommentCaMarche :
http://www.commentcamarche.net/forum/affich-24282430-poc-download-avec-hash-taille-gegenbinaire ))

à vous lire
librequetucrois - 8 févr. 2012 à 04:18
slt re : le compteur hexa fonctionne ... :
Astuce convertir DEC to HEX & danseur '.bat' | CommentCaMarche :
http://www.commentcamarche.net/forum/affich-24364049-astuce-convertir-dec-to-hex-danseur-bat
/!\ Le programme utilise "timeout /T 1 > nul" :
C:\Windows\System32\timeout.exe Windows 7 x64
CRC32: 02B42444
MD5: 68A0A50CCAD87E1EE1944410A96D066C
SHA-1: D2F730BCD081532FE2787E28408133F67F593A5F
SHA-256: 7E93723C0C34EF98444E5CE9013FEF220975B96291A79053FD4C9B3D3550AEB3
32,5 Ko (33 280 octets) taille + hash = fichier (...).
fsutil file createnew c:\timeout.exe 33280 (crée un fichier vide de 33280 octets ; Windows)
00 00 00 00 test hash du fichier ; ici de 4 octets pour la démonstration rapide.
00 00 00 01 +1 (avec un script qui pilote XVI32 (éditeur hexa) ou à la main lol) et test hash
00 00 00 02 +1 (avec un script qui pilote XVI32 (éditeur hexa) ou à la main lol) et test hash
(...)
FF FF FF FF +1 et test hash (vous devez avoir trouvé un hash correspondant ...)
Ajouter un commentaire
Réponse
+2
moins plus
C:\>choice /t:o,30>nul
'choice' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.

C:\>
-???
jipicy- 26 janv. 2006 à 13:49
Salut,

Availability
Choice.com was originally supplied on the Windows 95 install CD, however there are some issues with this version under NT - multiple concurrent invocations of CHOICE will clobber each other. CHOICE.com will also burn a lot of CPU's when in a wait state.
The NT and 2000 Resource Kits contain CHOICE.EXE which behaves a lot better.
In Windows 2003 CHOICE became a built-in command so it is no longer in the resource kit.

http://www.ss64.com/nt/choice.html
Ajouter un commentaire
Réponse
+2
moins plus
Bonjour,

sleep x (avec x = Nb de secondes) répond au problème

Cordialement
Ajouter un commentaire
Réponse
+2
moins plus
yop
il y a une solution toute simple et qui engorge pas les script avec le logiciel "delay" que beaucoup ne connaisse pas car choice et pas compatible xp :p

donc telecharge delay la http://users.csc.calpoly.edu/~bfriesen/software/files/delay32.zip

dezippe le dans windows et maintenant tu a juste a marker le temp je te donne un exmple de script

@echo off
start notepad.exe
@echo attente de 30seconde avant la reprise
delay 30
@echo attente terminer
start calc.exe
pause

voila donc ces un exemple tou con pour te montrer donc on lance notepad puis le message @echo attente de 30seconde avant la reprise ce marke puis en dessous le compte a rebours defile au bout de 30seconde le texte attente terminer saffiche et lance lla calculatrice j ai mis une pause a la fin pour que la fenetre reste ouverte mais tu peut l enlever :)

donc le script terminer ca donne ca

attente de 30seconde avant la reprise
Pausing for 0
attente terminer
Appuyez sur une touche pour continuer...

voilas cette exemple je lé fait le plus simple possible

pour le temp tu a juste a changer le temp a coter de "delay"
voila
Ajouter un commentaire
Réponse
+2
moins plus
@echo off

setlocal enableextensions
setlocal enabledelayedexpansion

rem
rem crude DOS wait sleep routine (0-59 secs)
rem

set sl=%1
if defined sl (
if !sl! gtr 59 (
echo.
echo Max wait. 59 secs.
echo.
goto :end_script
)
call :sleep %sl%
) else (
set /p sl=Enter sleep time ^(0-59 secs^):
if !sl! gtr 59 (
echo.
echo Max wait. 59 secs.
echo.
goto :end_script
)
call :sleep !sl!
)

goto :end_script

:sleep
if not defined 2 (
set /a w_time=0
) else (
set /a w_time=%2
)
for /f "tokens=4 delims=:" %%i in ('echo. ^| time') do (
set t1=N%%i
set t1=!t1:N00.0=!
set t1=!t1:N00=!
set t1=!t1:N0=!
set t1=!t1:N=!
set t1s=!t1:.=!
set /a t1f=!t1s!
)
:s_time
for /f "tokens=4 delims=:" %%i in ('echo. ^| time') do (
set t2=N%%i
set t2=!t2:N00.0=!
set t2=!t2:N00=!
set t2=!t2:N0=!
set t2=!t2:N=!
set t2s=!t2:.=!
set /a t2f=!t2s!
)
if !t2f! lss !t1f! set /a t2f=!t2f!+6000

set /a w_time=!t2f!-!t1f!
set /a m_time=%1*100

if !w_time! leq !m_time! goto :s_time %1 !w_time!

goto :end_sleep

:end_sleep

:end_script

endlocal
patatesaulard - 26 juil. 2010 à 09:28
bonjour
bon script, mais ne fonctionne pas sous dos en paramètres régionaux "france" car dans time le point est remplacé par une virgule.
il faut donc ajouter la ligne suivante pour remplacer cette virgule (si elle est là) par un point
après set t1=N%%i il faut ajouter
set t1=!t1:,=.!
et après set t2=N%%i il faut ajouter
set t2=!t2:,=.!
Ajouter un commentaire
Réponse
+1
moins plus
Merci,

mais comment fait on pour choisir le temps? 30 seconde, ou deux minutes, ou autre?
rameur- 20 janv. 2006 à 10:44
pause affiche juste "appuyer sur une touche pour continuer..."
Ajouter un commentaire
Réponse
+1
moins plus
desole mais sous xp, ca remarche pas :
------------------------------------------

C:\Documents and Settings\Administrateur.TITANIUM>CHOICE do you like me ?
'CHOICE' n'est pas reconnu en tant que commande interne
ou externe, un programme exécutable ou un fichier de commandes.
------------------------------------------
Ajouter un commentaire
Réponse
+0
moins plus
tu mets un "pause" a la ligne c'est tout
Silence - 30 avril 2010 à 17:53
Oblige une interaction usager. Ce n'est pas ce qui est demandé.
Ajouter un commentaire
Réponse
+0
moins plus
Bah oui je sais bien mais je recherche quelque chose qui se fasse automatiquement sans avoir besoin de toucher a quoi que se soit. donc pause ca ne va pas. :(

Merci quand même, si vous avez d'autre idées je suis preneur...
Ajouter un commentaire
Réponse
+0
moins plus
desole, je crois que ma boite a idee est vide. a moins que tu n'ecrives ton propre interpreteur, je ne vois pas d'autres solutions. ou tu pourrai peut etre ecrire un petit programme en ligne de commande que tu appelles dans ton batch en lui passant la duree de son execution du genre

copy ...
wait 60
...
Ajouter un commentaire
Réponse
+0
moins plus
Colle ça dans "sytem32" (après détarrage) : http://eyn.free.fr/CHOICE.ZIP
C:\DOCUME~1\jp>CHOICE do you like me ?
do you like me ? [Y,N]?Y

C:\DOCUME~1\jp>
;-))
Ajouter un commentaire
Réponse
+0
moins plus
ah! fallait y penser, thanks :)
jipicy- 30 janv. 2006 à 17:15
Ben fallait juste lire ;-))
Ajouter un commentaire
Réponse
+0
moins plus
Félicitation djik ce command est bien fait et test avec succer
Ajouter un commentaire
Réponse
+0
moins plus
bas tu le lais j ai aisseiller sa marche
Ajouter un commentaire
Ce document intitulé « Faire une attente sous dos (batch) » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?
Faire une attente sous dos (batch) - page 2