UNIXの「time」コマンドに相当するWindows


69

そのため、Unixには、timeユーザーがコード/その他のものの時間を計測できるコマンドがあります。Windowsのコマンドラインに同様のものがあるかどうか疑問に思っていました。

また、ここで Linuxコマンドラインに関する以前の質問をしました。Windowsでも同じことができますか?もしそうなら、どのように?


2
Windowsには標準のcmd.exeがありますが、Linuxバージョンに近いものが必要な場合は、PowerShellを入手してください。
ギジェルモSiliceo Trueba

私は最初の結果がGoogleで「ウィンドウのコマンド時間」を検索しました:http
デビッドミシェル

私はWindows 7を使用していますが、上記のソリューションを試しました。次のエラーが表示されます:Unable to query system performance data (c0000004)。私はそれをグーグルで検索し、他の誰かがまったく同じ問題を抱えていましたが、フォーラムは解決策を提案していません。とにかく提案をありがとう。誰かが他の部分に何かを提案できますか?
efficiencyIsBliss

@eff、timeit.exeは、サーバ2003とXP私の知る限りのためですが、私は7との互換性はないと思う
ジョン・T

回答:


57

Powershellを使用する

Measure-Command {start-process whateveryouwantexecute -Wait}

必要に応じて編集@efficiencylsBliss:

Measure-Command {start-process java -argumentlist "whateverargumentisneeded" -wait}

私が試したものは次のとおりMeasure-Command {java test <inputfile> -Wait}です。時間関連の統計情報のリストを取得しましたが、コードからの出力は取得しませんでした。私は何か間違っていますか?
efficiencyIsBliss

@efficiency:start-processコマンドを忘れました。
サーシャチェディゴフ

Start-Process:引数 '。\ 6-8.txt'を受け入れる位置パラメーターが見つかりません。1行目:char:31 + Measure-Command {start-process <<<< java。\ dancebattle。\ 6-8.txt -wait} + CategoryInfo:InvalidArgument:(:) [Start-Process]、ParameterBindingException + FullyQualifiedErrorId :PositionalParameterNotFound、Microsoft.PowerShell.Commands.StartProcessCommand`
efficiencyIsBliss

1
を使用してPythonスクリプトを実行するのにかかる時間を測定しようとしていMeasure-Command {start-process \Python27\python test.py -Wait}ます。これにより、プロセスを実行するための新しいcmdウィンドウが開きますが、実行が完了したらウィンドウが閉じます。スクリプトの出力も見たいのですが、どうすればウィンドウを開いたままにできますか?
ジョンピータートンプソンガルス

2
@JohnPeterThompsonGarcésは、start-processコマンドレットの-NoNewWindowパラメーターを使用します
mjsr

21

私はWin XPを使用していますが、何らかの理由でtimeit.exe動作しません。私は別の選択肢を見つけました ptime::

ptime 1.0-プログラムの実行時間を正確に測定する

ptimeは、指定されたコマンドとパラメーターを実行し、実行時間(実行時間)を5ミリ秒以上の精度で秒単位で測定します。自動プロセスタイマー、またはベンチマークの目的で使用されるプログラムタイマーです。


ptimeには小さなバグが1つあります。「子」プログラムがエラーで終了した場合でも、ptimeは常にエラーレベルとして0を返します
Yura Shinkarev

超シンプルで正確な出力。
ジャンピオ

Win10で正常に動作するようです。
mivk

18

あなたはバッチスクリプトで少しカンニングをすることができます...

@echo off
echo %time% < nul
cmd /c %1
echo %time% < nul

次に、このスクリプトの引数としてプログラムを実行します...

タイマーmyprogram.exe

そして引数については...

タイマー「myprogram.exe -sw1 -sw2」

出力例:

17:59:20.02
some text
17:59:20.03

バッチスクリプトをPATH変数のどこかに配置し、C:\Windows\System32名前を付けtimer.cmdます。もちろん、2番目のcmdインスタンスをフォークするとパフォーマンスはわずかに低下しますが、非常に最小限です。


そのプロンプトは機能しません@echo off echo %time% < nul cmd /c %1 echo %time% < nul 。環境変数(?)の終了%を

%1のようなコマンドラインパラメーターには、終了%はありません。それはあなたが意図したものですか?
アンドリューJ.ブレム

2
にリダイレクトnul するの はなぜechoですか?echo入力を読み取りません。
ジョーイ14年

1
あなたは変更することができますcmd /c %1cmd /c %*は、コマンドの引数に引用符を保存することができるように、
stanleyxu2005

3

timeWindows上のUnix に直接相当するものはありません。

ジョージア大学には、UNIXユーザー向けWindowsコマンドの簡単なリストがあります。

古いWindowsコマンドプロンプトが見つかり、.batスクリプトはUnixシェルに比べてかなり制限されていますが、ファイルなどをループするための機能がいくつかあります。CommandWindows.comにはいくつかのヒントがあります

bashWindowsにインストールする(CygWinをインストールするなど)か、Windows Powershellを習得することができます(これには同等の方法があります)。


2

コードの出力は、ファイルにパイプすることができます。 java test <inputfile> | Out-File d:\a.txt

所要時間を測定するには、Measure-Commmandにカプセル化する必要があります。

Measure-Commmand {java test <inputfile> | Out-File d:\a.txt}


2

PowerShellをMeasure-Commandで使用しようとする場合、予期しない問題が発生する可能性があることに注意してください。私のコマンド>リダイレクトを使用してバイナリデータをファイルに書き込みますが、PowerShell はファイルの先頭にBOMを追加し、書き込みのたびにCRLF改行を追加しました!


1

いくつかのコーヒーは私がこれを思い付くのを助けました:

function time { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-default} }

また、何も出力しないようにするには、out-nullに置き換えます。

function timequiet { $Command = "$args"; Measure-Command { Invoke-Expression $Command 2>&1 | out-null} }

次のように使用します。

PS C:\> time sleep 5


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 990
Ticks             : 49906722
TotalDays         : 5,77624097222222E-05
TotalHours        : 0,00138629783333333
TotalMinutes      : 0,08317787
TotalSeconds      : 4,9906722
TotalMilliseconds : 4990,6722



PS C:\>

1

使いやすくするために、ここにチョコレートのパッケージがあります:https : //chocolatey.org/packages/ptime C:/> choco install ptime

ifの利点ptimeは、Unixバージョンのように動作し、コンソール出力を生成するMeasure-Command { XXX }ことです(これは実行しません(少なくとも、それを行う方法がわかりません)。


0

「時間」コマンドを取得するには、いくつかの異なるオプションがあります。私の好みはCygwinをインストールすることです(これにはUNIXに似たtimeコマンドが付属しています)。

または、スクリプトを記述してパスに追加できます(パス全体を指定せずに実行できるように)。

Powershellを使用できる場合は、次のスクリプトを試してください(ファイルを呼び出すときに機能します。「。exe」など)。

$start = get-date
if ($args.length -gt 1) {
start-process $args[0] $args[1..$args.length] -workingdirectory $pwd -nonewwindow -wait
} else {
start-process $args[0] -workingdirectory $pwd -nonewwindow -wait
}
$end = get-date
$elapsed = $end - $start
write-host $end-$start
# datetime format
write-host $elapsed
# easy-to-read format
echo $elapsed

(たとえば)コードを実行します:

time.ps1 python program.py

Batchを使用して、ここから(Stackoverflow.comで)上位の回答のいずれかを提案します。どちらもコピー&ペーストするだけです。paxdiabloのソリューションを使用する場合は、置き換えてください

ping -n 11 127.0.0.1 >nul: 2>nul: 

%*

0

gnomonは、コマンドの合計実行時間だけでなく、ライン測定のラインも必要な場合に最適なソリューションです。

タイムスタンプ情報を別のコマンドの標準出力に追加するコマンドラインユーティリティ。時間がかかるプロセスの履歴レコードが必要な、長時間実行されるプロセスに役立ちます。

を実行してインストールしnpm install -g gnomon、それを経由して使用しcommand | gnomonます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.