Page 1 sur 1

Mesurer temps execution d'un batch ou d'une application ext.

Posté : 21 juil. 2009 12:08
par Bigfish
Mesurer le temps d'execution d'un batch ou d'un application externe.

Voici une methode pour mesurer le temps d'execution de vos batch ou application externe:

:!: Mise à jour du 24-07-09
J'ai amélioré l'utilisation de l'expansion retardée. les resultats sont plus... réalistes^^

-Premier exemple, un code batch integré au code de mesure :

Code : Tout sélectionner

@echo off
rem -----------------------------------------------
rem mesure temps d'execution d'un batch
rem cree par Bigfish alias 3ddI7IHd
rem le 21-07-09
rem Modifié le 24-07-09
rem -----------------------------------------------
set hdebut=%time:~,2%
set mdebut=%time:~3,2%
set sdebut=%time:~6,2%
set mlsdebut=%time:~9,2%

rem ************cette partie du code sert a la demo************
rem vous devrez remplacer cette partie par le code dont voulez connaitre le temp d'execution
set nbboucle=2194
set compteur=0
set message=Demo en cours
:boucle
if %compteur:~-3%==000 set message=Demo en cours
if %compteur:~-2%==00 (
    cls
    set message=%message%-
    echo %message%
)
if %compteur%==%nbboucle% goto fin
set /a compteur=compteur+1
goto boucle
rem ************************ fin du code demo *****************

:fin
set hfin=%time:~,2%
set mfin=%time:~3,2%
set sfin=%time:~6,2%
set mlsfin=%time:~9,2%

Rem prise en compte du temps a cheval sur 2 heures
set /a htemps=hfin-hdebut
setlocal enableDelayedExpansion
if %htemps%==0 (
    set /a mtemps=mfin-mdebut
) else (
    set /a mtemps=60-mdebut
    set /a mtemps=!mtemps!+mfin
    if !mtemps! geq 60 (
        set /a mtemps=!mtemps!-60
    ) else (
        set /a htemps=!htemps!-1
    )
)

Rem prise en compte du temps a cheval sur 2 minutes
if !mtemps!==0 (
    set /a stemps=sfin-sdebut
) else (
    set /a stemps=60-sdebut
    set /a stemps=!stemps!+sfin
    if !stemps! geq 60 (
        set /a stemps=!stemps!-60
    ) else (
        set /a mtemps=!mtemps!-1
    )
)

Rem prise en compte du temps a cheval sur 2 secondes
if !stemps!==0 (
    set /a mlstemps=mlsfin-mlsdebut
) else (
    set /a mlstemps=100-mlsdebut
    set /a mlstemps=!mlstemps!+mlsfin
    if !mlstemps! geq 100 (
        set /a mlstemps=!mlstemps!-100
    ) else (
        set /a stemps=!stemps!-1
    )
)

rem preparation de l'ecriture du resultat
set htest=*%htemps%
set mtest=*%mtemps%
set stest=*%stemps%
set mlstest=*%mlstemps%

if %htest:~-2,1%==* set htemps=0%htemps%
if %mtest:~-2,1%==* set mtemps=0%mtemps%
if %stest:~-2,1%==* set stemps=0%stemps%
if %mlstest:~-2,1%==* set mlstemps=0%mlstemps%

rem ecriture du resultat
echo Temps d'execution: %htemps%:%mtemps%:%stemps%,%mlstemps%


echo.
echo (C)3ddI7IHd
echo.
pause
 
-2ieme exemple, un batch ou une application externe:

Code : Tout sélectionner

@echo off
rem -----------------------------------------------
rem mesure temps d'execution d'un batch
rem cree par Bigfish alias 3ddI7IHd
rem le 21-07-09
rem Modifié le 24-07-09
rem -----------------------------------------------
set hdebut=%time:~,2%
set mdebut=%time:~3,2%
set sdebut=%time:~6,2%
set mlsdebut=%time:~9,2%

rem ************Lancement du bach ou de l'application externe************
start /wait cmd.exe /c "c:\temp\compteur demo.bat "
rem ******************************************************************************

:fin
set hfin=%time:~,2%
set mfin=%time:~3,2%
set sfin=%time:~6,2%
set mlsfin=%time:~9,2%

Rem prise en compte du temps a cheval sur 2 heures
set /a htemps=hfin-hdebut
setlocal enableDelayedExpansion
if %htemps%==0 (
    set /a mtemps=mfin-mdebut
) else (
    set /a mtemps=60-mdebut
    set /a mtemps=!mtemps!+mfin
    if !mtemps! geq 60 (
        set /a mtemps=!mtemps!-60
    ) else (
        set /a htemps=!htemps!-1
    )
)

Rem prise en compte du temps a cheval sur 2 minutes
if !mtemps!==0 (
    set /a stemps=sfin-sdebut
) else (
    set /a stemps=60-sdebut
    set /a stemps=!stemps!+sfin
    if !stemps! geq 60 (
        set /a stemps=!stemps!-60
    ) else (
        set /a mtemps=!mtemps!-1
    )
)

Rem prise en compte du temps a cheval sur 2 secondes
if !stemps!==0 (
    set /a mlstemps=mlsfin-mlsdebut
) else (
    set /a mlstemps=100-mlsdebut
    set /a mlstemps=!mlstemps!+mlsfin
    if !mlstemps! geq 100 (
        set /a mlstemps=!mlstemps!-100
    ) else (
        set /a stemps=!stemps!-1
    )
)

rem preparation de l'ecriture du resultat
set htest=*%htemps%
set mtest=*%mtemps%
set stest=*%stemps%
set mlstest=*%mlstemps%

if %htest:~-2,1%==* set htemps=0%htemps%
if %mtest:~-2,1%==* set mtemps=0%mtemps%
if %stest:~-2,1%==* set stemps=0%stemps%
if %mlstest:~-2,1%==* set mlstemps=0%mlstemps%

rem ecriture du resultat
echo Temps d'execution: %htemps%:%mtemps%:%stemps%,%mlstemps%


echo.
echo (C)3ddI7IHd
echo.
pause
 
Ce dernier exemple fonctionne avec un batch appelé "compteur demo.bat " et ce trouvant dans un repertoire: "c:\temp\"

le batch "compteur demo.bat " contient le code suivant:

Code : Tout sélectionner

@ echo off

set nbboucle=3000
set compteur=0
set message=Demo en cours 
:boucle
if %compteur:~-3%==000 set message=Demo en cours 
if %compteur:~-2%==00 (
    cls
    set message=%message%-
    echo %message%
)
if %compteur%==%nbboucle% goto fin
set /a compteur=compteur+1
goto boucle

:fin
 
A+
3ddI7IHd

Re: Mesurer temps execution d'un batch ou d'une application ext.

Posté : 22 juil. 2009 07:56
par kinix
Salut
Tu pourrais m'expliqué ce qu'est le temps a cheval??

Re: Mesurer temps execution d'un batch ou d'une application ext.

Posté : 22 juil. 2009 14:21
par Bigfish
Salut,

La mesure du temps est en base 100 pour les milliseconde et en base 60 pour les secondes et minutes

Si l'execution de ton code dure 40 secondes, et que l'execution commence a la 10ieme secondes de la minute en cours(sdebut), l'execution ce terminera a la 50ieme secondes de cette meme minute(sfin).
Donc pour connaitre le temp d'execution il suffit de faire:

sfin-sdebut=Stemps
soit
50-10=40

mais pour une meme duré de 40" si sdebut=45" et comme ici nous somme en base 60, alors sfin=25"
(Nous somme donc ici à "cheval" sur 2 minutes)

si dans ce cas on utilise la formule precedente:
sfin-sdebut=Stemps
on obtient:
25-45=-20 ce qui est faux !
dans ce cas on vas utilisé une autre formule qui est:

(60-sdebut)+sfin=stemps
soit
(60-45)+25=40

Comment differencier ces 2 cas ?

et bien il suffit de comparer la minute de debut(mdebut) et la minute de fin(mfin). Pour cela j'ai choisi de faire la difference et de regarder si cette difference est egale à 0
ce qui donne:

mtemps=mfin-mdebut
si mtemps=0 alors
Stemps=sfin-sdebut
sinon
stemps=(60-sdebut)+sfin

voila pour la premiere partie, car il y a un autre cas

A+

Re: Mesurer temps execution d'un batch ou d'une application ext.

Posté : 26 juil. 2009 18:42
par Batch_Man
Bonjour,

Très belle explication.
Bravo.

Peut-être qu'il y a moyen de faire plus cours :D

Batch_Man

Re: Mesurer temps execution d'un batch ou d'une application ext.

Posté : 22 oct. 2010 12:34
par Mack588
Bonjour, ce sujet est très intéressant et m'a pas mal aidé.
Mais j'aurais deux petites questions.

Etant débutant j'ai réussi à me dépatouiller un minimum, mais ce que je n'arrive pas à faire c'est mesurer le temps d'ouverture d'un fichier Office tel qu'il soit, car dans ce cas là on mesure le temps d'exécution d'une application.

Comment puis-je faire pour mesurer le temps d'ouverture d'un fichier quelconque ?

Et ma seconde question serait comment je peux intégrer ce code pour mesurer le temps d'une copie de documents ?

Merci par avance.

Mack588.

Re: Mesurer temps execution d'un batch ou d'une application ext.

Posté : 22 juil. 2011 17:36
par Cmanix
Salut, j'ai réussi à faire la même chose en 16 lignes sans utiliser de boucle for ;) .De plus le mien n'affiche pas les valeurs null exemple: "00:01:34,20" afficherai exactement "1 Minute 34 Secondes 20 Centièmes".

j'utilise cette fonction dans ce batch.

Prochaine étape: faire sa en trois ligne :D