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を使う方法が簡単だと思います。