Comment imprimer le temps (en ms) dans un fichier batch Windows ?
Je veux mesurer le temps qui s'écoule entre les lignes de mon fichier batch, mais la commande "time /T" de Windows n'imprime pas les millisecondes.
Comment imprimer le temps (en ms) dans un fichier batch Windows ?
Je veux mesurer le temps qui s'écoule entre les lignes de mon fichier batch, mais la commande "time /T" de Windows n'imprime pas les millisecondes.
J'en doute :) Quel était le problème ? Le fait de le partager ici aiderait-il d'autres personnes qui rencontrent le même problème ?
Si vous faites quelque chose comme
for /l %%i in (1,1,500) do @echo %time%
ou
if foo (
echo %time%
do_something
echo %time%
)
alors vous pourriez simplement mettre un setlocal enabledelayedexpansion
au début de votre fichier batch et utilisez !time!
au lieu de %time%
qui est évalué lors de l'exécution, et non lors de l'analyse de la ligne (qui comprend des blocs complets entre parenthèses).
Le "programme" batch ci-dessous devrait faire ce que vous voulez. Veuillez noter que les données sont exprimées en centisecondes et non en millisecondes. La précision des commandes utilisées n'est que de quelques centisecondes.
Voici un exemple de sortie :
STARTTIME: 13:42:52,25
ENDTIME: 13:42:56,51
STARTTIME: 4937225 centiseconds
ENDTIME: 4937651 centiseconds
DURATION: 426 in centiseconds
00:00:04,26
Voici le lot script :
@echo off
setlocal
rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99
set STARTTIME=%TIME%
rem here begins the command you want to measure
dir /s > nul
rem here ends the command you want to measure
set ENDTIME=%TIME%
rem output as time
echo STARTTIME: %STARTTIME%
echo ENDTIME: %ENDTIME%
rem convert STARTTIME and ENDTIME to centiseconds
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)
rem calculating the duratyion is easy
set /A DURATION=%ENDTIME%-%STARTTIME%
rem we might have measured the time inbetween days
if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%
rem now break the centiseconds down to hors, minutes, seconds and the remaining centiseconds
set /A DURATIONH=%DURATION% / 360000
set /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
set /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
set /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)
rem some formatting
if %DURATIONH% LSS 10 set DURATIONH=0%DURATIONH%
if %DURATIONM% LSS 10 set DURATIONM=0%DURATIONM%
if %DURATIONS% LSS 10 set DURATIONS=0%DURATIONS%
if %DURATIONHS% LSS 10 set DURATIONHS=0%DURATIONHS%
rem outputing
echo STARTTIME: %STARTTIME% centiseconds
echo ENDTIME: %ENDTIME% centiseconds
echo DURATION: %DURATION% in centiseconds
echo %DURATIONH%:%DURATIONM%:%DURATIONS%,%DURATIONHS%
endlocal
goto :EOF
%TIME% est dans le format H:MM:SS,CS après minuit et donc la conversion en centisecondes ne fonctionne pas. En voyant le message de Patrick Cuff à 6:46am, il semble que ce ne soit pas seulement moi.
Peut-être cet outil ( version archivée ) pourrait vous aider ? Il ne renvoie pas le temps, mais c'est un bon outil pour mesurer le temps que prend une commande.
Merci, +1 utile. Mais il est toujours intéressant de savoir pourquoi il n'y a pas d'impression simple de l'heure dans le lot...
J'aime cette suggestion. Malheureusement, sans le nom de l'outil, lorsque le lien est rompu (par exemple maintenant), je ne peux pas voir de quoi vous parlez.
I piense en ça aurait pu être timethis.exe
(qui, au moment de la rédaction de cet article, semble être disponible via ce lien .
%TIME% est dans le format H:MM:SS,CS après minuit et donc la conversion en centisecondes >ne fonctionne pas. En voyant le message de Patrick Cuff à 6:46am, il semble que ce ne soit pas seulement moi.
Mais avec ces lignes, vous devriez résoudre ce problème facilement :
if " "=="%StartZeit:~0,1%" set StartZeit=0%StartZeit:~-10%
if " "=="%EndZeit:~0,1%" set EndZeit=0%EndZeit:~-10%
Merci pour votre belle inspiration ! J'aime l'utiliser dans mes mplayer, ffmpeg, sox scripts pour pimper mes mediafiles pour les vieux PocketPlayers juste pour le plaisir.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Liés : stackoverflow.com/a/35974790/3389585