我想测量在批处理文件中调用的多个应用程序所花费的时间(在某些条件下)。您能否告诉我如何在 BatchFile 中实现 StopClock。我们在 C# 和 C++ 中有一个 StopClock 类。
提前致谢。
我想测量在批处理文件中调用的多个应用程序所花费的时间(在某些条件下)。您能否告诉我如何在 BatchFile 中实现 StopClock。我们在 C# 和 C++ 中有一个 StopClock 类。
提前致谢。
您可以通过将变量设置为 来捕获变量中的开始和停止时间%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
这是我放在一起的批处理文件,用于测量 2 个应用程序(在此为notepad
和rdp
)运行直到它们在几秒钟内关闭所花费的时间。
@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
希望这可以帮助