0

バッチファイルで呼び出される複数のアプリケーションにかかる時間を測定したいと思います (いくつかの条件付き)。BatchFile に StopClock を実装する方法を教えてください。C# と C++ には StopClock クラスがあります。

前もって感謝します。

4

2 に答える 2

0

変数を に設定することにより、変数の開始時間と停止時間をキャプチャできます%TIME%

FOR /F を使用して、時間を時、分、秒、およびセンチ秒 (1/100 秒) に解析できます。

SET /A は先頭に 0 がある数値を 8 進数として扱うため、10 進数表記を強制するには、各数値の前に 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
于 2012-10-16T16:27:09.607 に答える
0

notepadこれは、2 つのアプリケーション (ここではと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

StopWatchC#などのクラスほど正確ではありませんが、かなり近いものです。十分に近づくまで、時間をいじってみてください。

実行する各アプリのループ セクションをコピーし (ラベルを , などに増やして:LOOP3) :LOOP4、それに応じてファイル名を置き換えます。

お役に立てれば

于 2012-10-16T16:03:50.430 に答える