コマンドラインツールの時間を測定する最も簡単で迅速な方法は何ですか?
私はこれが数分または1時間以上かかることを期待しているので、それは超正確である必要はありません(+/-秒は大丈夫です)。また、バッチファイルの書き込みも問題ありません。また、時間どおりに計算する必要はなく、開始時刻と終了時刻を表示するだけです。
コマンドラインツールの時間を測定する最も簡単で迅速な方法は何ですか?
私はこれが数分または1時間以上かかることを期待しているので、それは超正確である必要はありません(+/-秒は大丈夫です)。また、バッチファイルの書き込みも問題ありません。また、時間どおりに計算する必要はなく、開始時刻と終了時刻を表示するだけです。
回答:
私は通常使用しています
echo.|time & my_command & echo.|time
手元に他に何もないとき。これにより、次のような出力が発生します。
> echo。| time&ping -n 4 localhost> nul&echo。| time 現在の時刻は次のとおりです。18:42:34,63 新しい時間を入力してください: 現在の時刻は次のとおりです。18:42:37,68 新しい時間を入力してください:
きれいではなく、findstrにパイプすることできれいにすることができます。
echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current
デフォルトで拡張が有効になっている(または/v:on
引数としてcmdを開始した)場合はecho !time!
、入力リダイレクトによる醜いハックに頼る必要なく、単に使用することもできます。
バッチファイルを使用する場合は、次のようにします。
@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%
ここでは、stdoutとstderrの両方のリダイレクトをnulに追加しました。そうしないと、開始行と終了行を見つけるのが難しい場合があるためです。これが問題にならない場合は、これを削除できます。
しかし、最近は主にTimeThisを使用していますが、これは残念ながら削除されています。
PowerShellにも方法があります。
Measure-Command { my_command }
ただし、作業ディレクトリまたはリダイレクトに依存することに注意する必要があります。それらが正しく機能するためには、ちょっとしたトリックが必要かもしれません:
@echo off
setlocal enableextensions
rem Prepare current directory and command line so they
rem can be stuck into a single-quoted PowerShell string.
set "Dir=%CD:'=''%"
set "Cmd=%*"
set "Cmd=%Cmd:'=''%"
rem Prepare command to pass to PowerShell
set Command=
set "Command=&{"
set "Command=%Command% Set-Location '%Dir%'"
set "Command=%Command%; [Environment]::CurrentDirectory = '%Dir%'"
set "Command=%Command%; $start = Get-Date"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host"
set "Command=%Command%; iex 'cmd /c %Cmd%'"
set "Command=%Command%; $end = Get-Date"
set "Command=%Command%; Write-Host"
set "Command=%Command%; Write-Host ' Command line : %Cmd%'"
set "Command=%Command%; Write-Host (' Start time : ' + $start.ToString())"
set "Command=%Command%; Write-Host (' End time : ' + $end.ToString())"
set "Command=%Command%; Write-Host (' Elapsed time : ' + ($end - $start).ToString())"
set "Command=%Command%; }"
powershell -noprofile -command "%Command%"
endlocal
これはと同じように実行できます。コマンドラインでtimethis
二重引用符\"
が必要な場合は、必ず二重引用符でエスケープしてください(timethis
同様に)。生成される出力は似ています。ただし、リダイレクトは機能しません。
timethis
。
システムスケジューラを使用して、コマンドを実行できます。
コントロールパネル->スケジュールされたタスク->新規作成...
スケジュールされたタスクを実行したいコマンドに向けるだけで、必要なことが実行されます。
時状態情報を格納するログファイルを作成したい場合は、上記のスクリプトと同様のことを行うことを検討してください。
日付と時刻をエコーするので、「今」というユーティリティを使用します。これは、ログファイルで追跡したいが、日付/時刻をネイティブに含めるための賢い機能がないコマンドラインスクリプトにとって非常に便利です。応答を気にせず、使い終わったら消えてしまうので非常に便利です。
スクリプトの例は...
echo -------------- >>logfile.txt
now Process Starting>> logfile.txt
<commandhere> <target> >> logfile.txt
now process Ending >> logfile.txt
echo -------------- >> logfile.txt
出力例は次のようになります
--------------
Mon Mar 06 14:58:48 2009 Process Starting
GNU Super Duper Process PID 12345! Success
Mon Mar 06 21:47:01 2009 Process Ending
--------------
もう1つのオプションは、現在のタイムアウトをコンソールに送信する(またはログにリダイレクトする)time
コマンドを使用/t
することです。これにより、設定する時間の入力を求められることはありません。時間、分を提供しますが、秒とミリ秒は提供しないという制限があります。
call time /t > myLog.log
call mybat >> myLog.log
call time /t >> myLog.log
powershellを使用している場合は、これを実行できます(読みやすくするためにすべて1行に分割)。
PS C:\> $startTime=Get-Date;ping /n 4 localhost;$endTime=Get-Date;
echo "Finished in $(($endTime-$startTime).ToString())"
または、これをファイルに保存して、簡単に再利用できます。
# usage: .\timer.ps1 program [arguments]
$startTime = Get-Date;
$prog = $args[0];
$progargs = $args[1..($args.length-1)];
&$prog $progargs
$endTime = Get-Date;
echo "Finished in $(($endTime - $startTime).ToString())";
In command prompt:
wmic path win32_operatingsystem get LocalDateTime
wmic path win32_operatingsystem get LocalDateTime
wmic path win32_operatingsystem get LocalDateTime
Output:
C:\Users\Steini> wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.370000+000
C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.525000+000
C:\Users\Steini>wmic path win32_operatingsystem get LocalDateTime
LocalDateTime
20180113135409.627000+000
クリップボードからCtrl + vを使用して15,5msおよび10,2ms
Far Manager 1.xユーザーは、タイマープラグインを検討できます。