Help us understand the problem. What is going on with this article?

PowerShellでtimeもどき

More than 1 year has passed since last update.

目的

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

おまけ

純粋なバッチファイル版のtimeコマンド(timer.bat)

earthdiver1
元科学技術系エンジニア。最近はWindows上で環境を整える必要のないPowerShellで遊んでます。基本的には自分用の備忘録ですが、誰かの参考になれば嬉しいです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away