Calculating Time Difference in Batch

Sometimes you may want to know how much time it takes for a set of actions to run in batch. For example, you have a Scheduled Task, or, you are doing some kind of benchmark you don’t want to supervise. It is a bit hard to do time calculations in batch due to the lack of the time-calculating functions. But it’s not impossible. The batch script below will gather the current system time through WMI (so it’s region independent), converts it to seconds, and records it in a variable. After running the tasks it will calculate the time again, and then format the difference to be human readable. In this example the difference will be printed on the console, but it can be also recorded in a logfile by appending logfile.txt to the end of the echo line.

One case when the script gives incorrect values is at the end of the month (when the script starts this month but ends in the next month).

I will use this script in one of my next post when I will do a compression benchmark with 7-zip. It will calculate the time taken to compress a file.

So, here’s the script:

@echo off
::::::::::::::::::::::::::::::::::::::::::
::  TimeDiff v1.00 by LEVENTE ROG       ::
::       www.thesysadminhimself.com     ::
::::::::::::::::::::::::::::::::::::::::::

::[ EULA ]:::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::  Feel free to use this script. The code can be redistributed  ::
::  and edited, but please keep the credits.                     ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

::[ CHANGELOG ]::::::::::::::
::  v1.00 - First Version  ::
:::::::::::::::::::::::::::::


FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32\_LocalTime Get Day^,Hour^,Minute^,Second /Format:table ^| findstr /r "."') DO (
  set Milisecond=%time:~9,2% 
  set Day=%%A
  set Hour=%%B
  set Minute=%%C
  set Second=%%D
)
set /a Start=%Day%\*8640000+%Hour%\*360000+%Minute%\*6000+%Second%\*100+%Milisecond%

::
::
:: PUT COMMANDS HERE
ping www.thesysadminhimself.com
::
::

FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32\_LocalTime Get Day^,Hour^,Minute^,Second /Format:table ^| findstr /r "."') DO (
  set Day=%%A
  set Hour=%%B
  set Minute=%%C
  set Second=%%D
)
set Milisecond=%time:~9,2% 
set /a End=%Day%\*8640000+%Hour%\*360000+%Minute%\*6000+%Second%\*100+%Milisecond%
set /a Diff=%End%-%Start%
set /a DiffMS=%Diff%%%100
set /a Diff=(%Diff%-%DiffMS%)/100
set /a DiffSec=%Diff%%%60
set /a Diff=(%Diff%-%Diff%%%60)/60
set /a DiffMin=%Diff%%%60
set /a Diff=(%Diff%-%Diff%%%60)/60
set /a DiffHrs=%Diff%

:: format with leading zeroes
if %DiffMS% LSS 10 set DiffMS=0%DiffMS!%
if %DiffSec% LSS 10 set DiffSec=0%DiffSec%
if %DiffMin% LSS 10 set DiffMin=0%DiffMin%
if %DiffHrs% LSS 10 set DiffHrs=0%DiffHrs%

echo %DiffHrs%:%DiffMin%:%DiffSec%.%DiffMS%

NOTE: To copy the entire code, just double-click and hit CTRL+C


Originally posted to: http://www.thesysadminhimself.com/2011/03/calculating-time-difference-in-batch.html

Updated:

Comments