#目的
PowerShellでUnixライクなtimeコマンドを実現する(実時間のみ)。
#背景
Windowsにもtimeコマンドは存在するが、UnixやLinuxのtimeとは異なりコマンドの実行時間の計測ができない。
#コード
PowerShellスクリプトですが、Windows バッチファイルとしても実行できる特殊な構造になっています。
time.bat
<# : バッチコマンド(PowerShellコメント)開始
@echo off & setlocal
rem
rem time.bat
rem
rem Created by earthdiver1
rem クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。
rem
rem -------------------------------------------------------------------------------
rem 以下はPowershellスクリプトをバッチファイルの中に埋め込むためのプリアンブルです。
set BATCH_ARGS=%*
if defined BATCH_ARGS set BATCH_ARGS=%BATCH_ARGS:"=\"%
if defined BATCH_ARGS set BATCH_ARGS=%BATCH_ARGS:^^=^%
endlocal & Powershell -NoP -C "&([ScriptBlock]::Create((${%~f0}|Out-String)))" %BATCH_ARGS%
exit/b
rem -------------------------------------------------------------------------------
: バッチコマンド(PowerShellコメント)終了 #>
Function Time {
Write-Host $Args
$cmd,$rest = $Args
Measure-Command { &$cmd $rest | Out-Host } | %{ Write-Host "`n$($_.TotalMilliseconds) msec" }
}
Time $Args
#実行例
>time.bat timeout 5
timeout 5
5 秒待っています。続行するには何かキーを押してください ..0
5125.7957 msec
#備考
スタンバイリスト(≈ファイルキャッシュ)をクリアしないと2回目以降の実行時はI/Oオーバーヘッドを含めた実行時間の計測が正確にできなくなります。スタンバイリストをクリアするツールはこちら。
Empty Standby List