
LinuxやmacOSではtimeコマンドを使用してコマンドの実行時間を計測することができます。
Windows 11やWindows 10などWindows系のOSにはtimeコマンドが搭載されていませんが、かわりにどのような方法を使えばよいのでしょうか。
以下、Windows 11やWindows 10でコマンドの実行時間を計測する方法を説明します(Stack Overflowの情報を参考にしました)。
PowerShellを使うのが簡単
Windows系OSでコマンドの実行時間を測定するには、PowerShellを利用するのが簡単です。
PowerShellを起動し、Measure-Command { コマンド }を実行することでコマンドの実行時間を計測することができます。
例えば以下のように実行します。
PS C:\Users\sora> Measure-Command {echo hi}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 0
Ticks : 5236
TotalDays : 6.06018518518518E-09
TotalHours : 1.45444444444444E-07
TotalMinutes : 8.72666666666667E-06
TotalSeconds : 0.0005236
TotalMilliseconds : 0.5236
このままではコマンドの出力が消えてしまいます。Measure-Command { コマンド | Out-Default}と実行するとコマンドの出力が得られます。
PS C:\Users\sora> Measure-Command {echo hi | Out-Default}
hi
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 0
Ticks : 8078
TotalDays : 9.34953703703704E-09
TotalHours : 2.24388888888889E-07
TotalMinutes : 1.34633333333333E-05
TotalSeconds : 0.0008078
TotalMilliseconds : 0.8078
実行時間をわかりやすく表示するには(Measure-Command { コマンド | Out-Default}).ToString()と実行します。
PS C:\Users\sora> (Measure-Command {echo hi | Out-Default}).ToString()
hi
00:00:00.0009268

コマンドプロンプトではバッチファイルが必要
PowerShellを使わない場合はバッチファイルなどを別途準備する必要があるようです。例えば以下の内容をtimecmd.batとして保存します。
@echo off
@setlocal
set start=%time%
:: Runs your command
cmd /c %*
set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%
:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
このバッチファイルを利用し、timecmd コマンドと実行します。
C:\opt\local\bin>timecmd echo hi hi command took 0:0:0.03 (0.03s total)
その他、現在はMicrosoftのサーバーからダウンロードできない(archive.orgからダウンロードできる)、Windows Server 2003 Resource Kit Toolsに含まれるtimeit.exeを利用する方法もあるようです。こちらは未確認です。
まとめ
Windows 11やWindows 10でコマンドの実行時間を計測する方法を説明しました。PowerShellに抵抗がなければMeasure-Commandを使う方法が簡単だと思います。
