Windows setara dengan perintah "waktu" UNIX


69

Jadi, Unix memiliki timeperintah yang memungkinkan pengguna mengatur waktu kode mereka / hal-hal lain. Saya bertanya-tanya apakah baris perintah Windows memiliki sesuatu yang serupa.

Juga, saya mengajukan pertanyaan sebelumnya tentang baris perintah Linux di sini . Bisakah kita melakukan hal yang sama untuk Windows? Jika ya, bagaimana caranya?


2
Windows memiliki cmd.exe standar tetapi jika Anda menginginkan sesuatu yang lebih dekat dengan versi linux dapatkan PowerShell, caranya lebih baik.
Guillermo Siliceo Trueba

Saya mencari "command time for windows" di google pada hasil pertama memberikan: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line
David Michel

Saya menggunakan Windows 7 dan saya baru saja mencoba solusi yang diposting di atas. Saya mendapatkan error berikut: Unable to query system performance data (c0000004). Saya mencari di Google dan orang lain memiliki masalah yang sama persis, tetapi forum tidak menyarankan solusi. Terima kasih atas sarannya. Dapatkah seseorang menyarankan sesuatu untuk bagian yang lain?
efficiencyIsBliss

@ eff, timeit.exe adalah untuk server 2003 dan XP AFAIK, saya tidak berpikir itu kompatibel dengan 7.
John T

Jawaban:


57

Gunakan Powershell

Measure-Command {start-process whateveryouwantexecute -Wait}

Diedit sesuai kebutuhan Anda @efficiencylsBliss:

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

Inilah yang saya coba: Measure-Command {java test <inputfile> -Wait}. Saya mendapat daftar statistik terkait waktu, tetapi bukan output dari kode. Apakah saya melakukan sesuatu yang salah?
efficiencyIsBliss

@Eisiensi: Anda lupa start-processperintah.
Sasha Chedygov

Mulai-Proses: Parameter posisi tidak dapat ditemukan yang menerima argumen '. \ 6-8.txt'. Pada baris: 1 char: 31 + Measure-Command {start-process <<<< java. \ Dancebattle. \ 6-8.txt -wait} + CategoryInfo: InvalidArgument: (:) [Start-Process], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound, Microsoft.PowerShell.Commands.StartProcessCommand`
efisiensiIsBliss

1
Saya mencoba mengukur waktu yang diperlukan untuk menjalankan skrip Python menggunakan Measure-Command {start-process \Python27\python test.py -Wait}. Ini membuka jendela cmd baru untuk menjalankan proses, tetapi kemudian menutup jendela setelah selesai berjalan. Saya juga ingin melihat hasil skrip, jadi bagaimana saya bisa membuka jendela?
John Peter Thompson Garcés

2
@ JohnPeterThompsonGarcés menggunakan parameter -NoNewWindow dari cmdlet start-proses
mjsr

21

Saya menggunakan Win XP, untuk beberapa alasan, timeit.exetidak berfungsi untuk saya. Saya menemukan alternatif lain ptime::

ptime 1.0 - Secara akurat mengukur waktu pelaksanaan program

ptime akan menjalankan perintah dan parameter yang ditentukan, dan mengukur waktu eksekusi (run time) dalam detik, akurat hingga 5 milidetik atau lebih baik. Ini adalah pengatur waktu proses otomatis, atau pengatur waktu program yang digunakan untuk tujuan benchmark.


ptime punya satu bug kecil. ptime selalu kembali 0 sebagai tingkat kesalahan, bahkan jika "anak" Program keluar dengan kesalahan
Yura Shinkarev

Output super sederhana dan akurat.
janpio

Tampaknya berfungsi dengan baik di Win10.
mivk

18

Anda dapat menipu sedikit dengan skrip batch ...

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

Kemudian jalankan program Anda sebagai argumen untuk skrip ini ...

timer myprogram.exe

dan untuk argumen ...

timer "myprogram.exe -sw1 -sw2"

contoh output:

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

tempatkan skrip batch di suatu tempat dalam variabel PATH Anda, mis C:\Windows\System32dan beri nama timer.cmd. Tentu saja ada hit kinerja kecil forking contoh cmd kedua, meskipun sangat minim.


prompt itu tidak akan berfungsi, @echo off echo %time% < nul cmd /c %1 echo %time% < nul Anda

Tidak ada% penutupan untuk parameter baris perintah seperti% 1. Apakah itu yang kamu maksud?
Andrew J. Brehm

2
Mengapa Anda mengarahkan nul ke echo ? echotidak pernah membaca input.
Joey

1
Anda dapat mengubah cmd /c %1ke cmd /c %*, sehingga Anda dapat menyimpan tanda kutip untuk argumen perintah
stanleyxu2005

3

Tidak ada yang setara langsung dengan Unix timedi Windows.

University of Georgia memiliki daftar singkat perintah Windows untuk pengguna Unix

Saya menemukan prompt perintah Windows yang lebih lama dan skrip .bat agak terbatas dibandingkan dengan shell Unix tetapi ada beberapa fasilitas untuk pengulangan file dll. CommandWindows.com memiliki beberapa tips

Anda dapat menginstal bashpada Windows (misalnya dengan menginstal CygWin) atau mempelajari Windows Powershell (yang saya asumsikan memiliki cara melakukan sesuatu yang setara).


2

Output untuk kode Anda dapat disalurkan ke file: java test <inputfile> | Out-File d:\a.txt

Untuk mengukur berapa lama Anda harus merangkumnya dalam Measure-Commmand:

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


2

Jika Anda mencoba menggunakan PowerShell dengan Measure-Command, ketahuilah bahwa mungkin ada beberapa gotcha yang tidak terduga. Perintah saya menulis data biner ke file menggunakan >pengalihan tetapi PowerShell menambahkan BOM ke awal file dan jeda baris CRLF setelah setiap penulisan!


1

Beberapa kopi membantu saya menghasilkan ini:

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

Dan jika Anda ingin menghasilkan apa-apa, ganti saja dengan out-null:

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

Anda menggunakannya seperti ini:

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

Untuk kemudahan penggunaan, berikut adalah paket cokelat: https://chocolatey.org/packages/ptime C:/> choco install ptime

Keuntungannya ptimeadalah bahwa ia bertindak seperti versi unix dan menghasilkan output konsol, yang Measure-Command { XXX }tidak (atau setidaknya saya tidak tahu bagaimana melakukannya).


0

Ada beberapa opsi berbeda untuk mendapatkan perintah 'waktu'. Preferensi saya adalah menginstal Cygwin (yang dilengkapi dengan timeperintah mirip-UNIX ).

Atau, Anda dapat menulis skrip dan menambahkannya ke jalur Anda (sehingga Anda dapat menjalankannya tanpa menentukan seluruh jalur).

Jika Anda memiliki Powershell , coba skrip ini (berfungsi saat memanggil file - '. Exe', dll.):

$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

Jalankan kode dengan (misalnya):

time.ps1 python program.py

Menggunakan Batch , saya sarankan salah satu jawaban teratas dari sini (di Stackoverflow.com) . Keduanya hanya perlu disalin. Perhatikan bahwa jika Anda menggunakan solusi paxdiablo , Anda harus menggantinya

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

dengan

%*

0

gnomon adalah solusi yang bagus jika Anda tidak hanya membutuhkan total run time dari sebuah perintah, tetapi juga line untuk pengukuran garis:

Utilitas baris perintah untuk menambahkan informasi stempel waktu ke output standar dari perintah lain. Berguna untuk proses jangka panjang di mana Anda ingin catatan sejarah tentang apa yang memakan waktu begitu lama.

Diinstal dengan menjalankan npm install -g gnomon, lalu gunakan melalui command | gnomon.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.