LoginSignup
1
0

More than 5 years have passed since last update.

PowerShellでtimeもどき

Last updated at Posted at 2017-07-03

目的

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)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0