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

Vous avez réalisé un script utile, faites en profiter la communauté !

Modérateur : WIN32-[GG]

Répondre
Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

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

Message 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
Modifié en dernier par Bigfish le 04 août 2009 10:35, modifié 2 fois.
kinix
Batcheur débutant
Messages : 17
Enregistré le : 27 juin 2009 21:49

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

Message par kinix »

Salut
Tu pourrais m'expliqué ce qu'est le temps a cheval??
Bigfish
Batcheur débutant
Messages : 26
Enregistré le : 08 août 2008 18:46

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

Message 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+
Modifié en dernier par Bigfish le 08 août 2009 10:49, modifié 3 fois.
Batch_Man
King Of Batch
Messages : 64
Enregistré le : 09 janv. 2009 00:01

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

Message par Batch_Man »

Bonjour,

Très belle explication.
Bravo.

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

Batch_Man
Mack588
Batcheur occasionnel
Messages : 1
Enregistré le : 22 oct. 2010 12:22

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

Message 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.
Cmanix
Batcheur débutant
Messages : 15
Enregistré le : 11 juil. 2011 15:20

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

Message 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
Répondre