如何在批处理文件中实现StopWatch?

时间:2012-10-16 15:35:32

标签: windows batch-file stopwatch

我想测量在批处理文件中调用的多个应用程序所花费的时间(在某些条件下)。您能否知道如何在BatchFile中实现StopClock。我们在C#和C ++中有一个StopClock类。

提前致谢。

2 个答案:

答案 0 :(得分:0)

这是一个批处理文件,我把它放在一起测量2个应用程序所需的时间(在此notepadrdp),直到它们在几秒钟内关闭。

@echo off
set stime=0
start notepad.exe
start mstsc.exe
set /a stime+=1

:LOOP
timeout /t 1 >nul
set /a stime+=1
tasklist /nh /fi "imagename eq notepad.exe" | find /i "notepad.exe" >nul && goto :LOOP || goto :LOOP2

:LOOP2
timeout /t 1 >nul
set /a stime+=1
tasklist /nh /fi "imagename eq mstsc.exe" | find /i "mstsc.exe" >nul && goto :LOOP2 || goto :BREAK

:BREAK
echo Time taken = %stime%
pause >nul

它不像C#StopWatch和类似的类那样准确,但它非常接近。只要玩弄时间,直到你足够接近它。

只需复制要运行的每个应用的循环部分(并为标签增加:LOOP3:LOOP4),并相应地替换文件名。

希望这有帮助

答案 1 :(得分:0)

您可以通过将变量设置为%TIME%来捕获变量的开始和停止时间。

FOR / F可用于将时间分析为小时,分钟,秒和厘秒(1/100秒)。

SET / A处理前导0为八进制的数字,因此每个数字必须以1为前缀以强制使用十进制表示法。其他一切都是相对直接的数学。

:timeDiff例程可以测量任何小于24小时的经过时间。结果是以厘秒为单位(1/100秒)。

@echo off
setlocal

:: Measure the time to do something
set start=%time%
for /l %%N in (1 1 100000) do echo off
set stop=%time%

:: Echo the elapsed time
call :timeDiff start stop

:: Store the elapsed time in variable named result
call :timeDiff start stop result
echo result=%result%

exit /b


:timeDiff  StartVar  StopVar  [RtnVar]
::
:: Compute elapsed time between time stored in StartVar and StopVar.
::
:: Return result in RtnVar, or echo result if RtnVar not specified
::
:: Result is in units of csec (1/100 second)
::
setlocal enableDelayedExpansion
for /f "tokens=1-4 delims=:.," %%A in ("!%~1!") do set /a timeDiff.start=(1%%A*360000)+(1%%B*6000)+1%%C%%D-36610000
for /f "tokens=1-4 delims=:.," %%A in ("!%~2!") do set /a timeDiff.stop=(1%%A*360000)+(1%%B*6000)+1%%C%%D-36610000
set /a rtn=timeDiff.stop-timeDiff.start
if rtn lss 0 set /a rtn+=864000
( endlocal
  if "%~3" neq "" (set %~3=%rtn%) else echo %rtn%
)
exit /b