Windowsでコマンドの実行時間を計測する方法

[PR]記事内のアフィリエイトリンクから収入を得る場合があります
  • URLをコピーしました!

S 20240704 202124

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

S 20240704 202801

コマンドプロンプトではバッチファイルが必要

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次