Apakah ada cara untuk mengukur waktu eksekusi suatu perintah pada baris perintah Windows?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
sumber
sumber
Jawaban:
Jika Anda menggunakan Windows 2003 (perhatikan bahwa windows server 2008 dan yang lebih baru tidak didukung), Anda dapat menggunakan Windows Server 2003 Resource Kit, yang berisi timeit.exe yang menampilkan statistik eksekusi terperinci. Berikut ini contohnya, mengatur waktu perintah "timeit -?":
Anda bisa mendapatkan TimeIt di Windows 2003 Resource Kit. Unduh di sini .
sumber
Atau, Windows PowerShell memiliki perintah bawaan yang mirip dengan perintah "waktu" Bash. Ini disebut "Measure-Command." Anda harus memastikan bahwa PowerShell diinstal pada mesin yang menjalankannya.
Input Contoh:
Contoh Output:
sumber
.exe
di direktori saat ini, gunakan ini:Measure-Command { .\your.exe }
. PowerShell tampaknya tidak menjalankan apa punpwd
kecuali diminta secara eksplisit.<stdout>
hasil perintah yang terlampir dalam kurung keriting!jika kamu mau
Coba salin skrip berikut ke file batch baru (mis. Timecmd.bat ):
Pemakaian
Jika Anda meletakkan timecmd.bat di direktori di jalur Anda, Anda dapat memanggilnya dari mana saja seperti ini:
Misalnya
Jika Anda ingin melakukan redirection output, Anda dapat mengutip perintah seperti ini:
Ini harus menangani perintah yang berjalan dari sebelum ke setelah tengah malam, tetapi hasilnya akan salah jika perintah Anda berjalan selama 24 jam atau lebih.
sumber
timecmd pause
, saya berlari , dan selalu menghasilkan 1,00 detik, 2,00 detik, 4,00 detik ... bahkan 0,00 detik! Windows 7.delims=:.
menjadidelims=:.,
, dan kemudian harus berfungsi "di seluruh papan".set start=10:10:10.10
set end=10:11:10.09
Dan hasilnya:command took 0:1:-1.99 (59.99s total)
Anda harus membalik urutan 4 baris yang melakukan perbandingan "lss 0", sehingga carry berkembang dengan benar dari angka sexagesimal rendah ke tinggi. Kemudian hasilnya menjadi:command took 0:0:59.99 (59.99s total)
Hehe, solusi paling sederhana mungkin adalah ini:
Ini berfungsi pada setiap Windows di luar kotak.
Dalam kasus aplikasi yang menggunakan output konsol, mungkin lebih nyaman untuk menyimpan waktu mulai dalam variabel sementara:
sumber
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Maaf, tidak bisa mendapatkan baris baru di komentar)set
untuk melakukan perhitungan.;-)
Oh, tunggu, tidak apa-apa, Anda sudah melakukannya di bawah.Hanya sedikit perluasan jawaban dari Casey.K tentang penggunaan
Measure-Command
dari PowerShell :Anda dapat memanggil PowerShell dari prompt perintah standar, seperti ini:
Ini akan memakan output standar, tetapi Anda dapat mencegahnya dengan menambahkan
| Out-Default
seperti ini dari PowerShell:Atau dari prompt perintah:
Tentu saja, Anda bebas untuk membungkus ini dalam file skrip
*.ps1
atau*.bat
.sumber
measureTime.bat "c:\program files\some dir\program.exe"
Satu-liner yang saya gunakan di Windows Server 2008 R2 adalah:
Selama perintah saya tidak memerlukan tanda kutip (yang mengacaukan pemrosesan penawaran cmd). The
/v:on
adalah untuk memungkinkan untuk dua nilai WAKTU yang berbeda untuk dievaluasi secara independen dan bukan sekali pada pelaksanaan perintah.sumber
^
di dalam cmd (seperti^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Lihat juga jawaban ini .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Jika Anda memiliki jendela perintah terbuka dan memanggil perintah secara manual, Anda dapat menampilkan cap waktu pada setiap prompt, misalnya
Ini memberi Anda sesuatu seperti:
Jika Anda memiliki skrip batch kecil yang mengeksekusi perintah Anda, miliki baris kosong sebelum setiap perintah, misalnya
Anda dapat menghitung waktu eksekusi untuk setiap perintah dengan informasi waktu pada prompt. Mungkin yang terbaik adalah menyalurkan output ke textfile untuk analisis lebih lanjut:
sumber
Karena orang lain merekomendasikan untuk menginstal hal-hal seperti freeware dan PowerShell, Anda juga dapat menginstal Cygwin , yang akan memberi Anda akses ke banyak perintah dasar Unix seperti waktu :
Tidak yakin berapa banyak overhead yang ditambahkan Cygwin.
sumber
Tidak seanggun beberapa fungsi di Unix, tetapi buat file cmd yang terlihat seperti:
Itu akan menampilkan waktu mulai dan berhenti seperti:
sumber
time
memiliki/t
opsi yang hanya menampilkan waktu sistem saat ini, tanpa mendorong Anda untuk memasukkan waktu baru. Namun ketika Anda melakukannya hanya menampilkan jam dan menit, yang mungkin tidak cukup baik untuk beberapa penggunaan. (Lihat jawaban John Snow untuk pertanyaan ini.)time /T
hanya dapat digunakan jika proses berjalan selama beberapa menit!time < nul
lebih jelek tapi lebih tepat.echo %time%
format dan ketepatan yang sama dengan yang Anda gunakantime < nul
, tetapi Anda menghindariEnter the new time:
hasilnya ...wmic os get LocalDateTime
Saya menggunakan freeware yang disebut "GS Timer".
Buat saja file batch seperti ini:
Jika Anda membutuhkan serangkaian waktu, cukup sambungkan output timer ke file .txt.
Anda bisa mendapatkannya di sini: Utilitas DOS Gratis Gammadyne
Resolusi adalah 0,1 detik.
sumber
Saya menggunakan Windows XP dan untuk beberapa alasan timeit.exe tidak berfungsi untuk saya. Saya menemukan alternatif lain - PTIME. Ini bekerja dengan sangat baik.
http://www.pc-tools.net/win32/ptime/
Contoh -
sumber
Ada juga TimeMem (Maret 2012):
sumber
Selama itu tidak bertahan lebih dari 24 jam ...
sumber
Ini dia
Versi pengatur waktu postfix:
Contoh penggunaan:
batas waktu 1 | TimeIt.cmd
Salin & tempel ini ke beberapa editor seperti misalnya Notepad ++ dan simpan sebagai TimeIt.cmd :
^ - Berdasarkan Versi 'Daniel Sparks'
sumber
Alternatif untuk mengukur waktu hanyalah "Dapatkan-Tanggal". Anda tidak memiliki kerumitan dengan meneruskan keluaran dan sebagainya.
Keluaran:
sumber
Ini adalah one-liner yang menghindari ekspansi yang tertunda , yang dapat mengganggu perintah tertentu:
Outputnya seperti:
Untuk tes jangka panjang, ganti
$T
dengan$D, $T
dan%TIME%
dengan%DATE%, %TIME%
memasukkan tanggal.Untuk menggunakan ini di dalam file batch , ganti
%Z
dengan%%Z
.Memperbarui
Ini adalah peningkatan satu-liner (tanpa ekspansi yang tertunda juga):
Outputnya mirip dengan ini:
Pendekatan ini tidak termasuk proses mengeluarkan yang baru
cmd
dalam hasilnya, juga tidak termasukprompt
perintah.sumber
Bergantung pada versi Windows yang Anda gunakan, hanya menjalankan
bash
akan menempatkan Anda dalam mode Bash. Ini akan memungkinkan Anda untuk menggunakan banyak perintah yang tidak tersedia di PowerShell secara langsung (sepertitime
perintah). Pengaturan waktu perintah Anda sekarang semudah mengeksekusi:Ini bekerja dengan baik untuk saya (Windows 10) setelah mencoba metode lain (seperti
Measure-Command
) yang terkadang menghasilkan statistik yang tidak diinginkan. Semoga ini bekerja untuk Anda juga.sumber
Jika ada orang lain datang ke sini mencari jawaban untuk pertanyaan ini, ada fungsi Windows API yang disebut
GetProcessTimes()
. Sepertinya tidak terlalu banyak pekerjaan untuk menulis program C kecil yang akan memulai perintah, melakukan panggilan ini, dan mengembalikan waktu proses.sumber
Ini adalah komentar / edit untuk
timecmd.bat
balasan bagus Luke SampsonPada beberapa konfigurasi, pembatas mungkin berbeda. Perubahan berikut harus mencakup setidaknya sebagian besar negara barat.
The
%time%
milidetik bekerja pada sistem saya setelah menambahkan bahwa ''(* karena situs tidak mengizinkan komentar langsung dan tidak melacak identitas yang baik meskipun saya selalu menggunakan email tamu yang sama yang dikombinasikan dengan ipv6 ip dan sidik jari browser harus cukup untuk mengidentifikasi secara unik tanpa kata sandi)
sumber
Inilah metode saya, tidak ada konversi dan tidak ada ms. Sangat berguna untuk menentukan jangka waktu pengkodean (terbatas hingga 24 jam):
sumber
sumber
Script berikut hanya menggunakan "cmd.exe" dan menampilkan jumlah milidetik sejak pipa dibuat hingga saat proses sebelum skrip keluar. yaitu, Ketikkan perintah Anda, dan pipa ke skrip. Contoh: "timeout 3 | runtime.cmd" akan menghasilkan sesuatu seperti "2990." Jika Anda membutuhkan output runtime dan output stdin, arahkan ulang stdin sebelum pipa - ex: "dir / s 1> temp.txt | runtime.cmd" akan membuang output dari perintah "dir" ke "temp.txt" dan akan mencetak runtime ke konsol.
sumber
call :calc
. Saya melakukannya di sini. Kode tautan dapatkan beberapa yang lebih baik dari cara ini. : DJawaban driblio bisa dibuat sedikit lebih pendek (meskipun tidak banyak dibaca)
Untuk komentar Luke Sampson versi ini aman untuk oktal, meskipun tugas harus diselesaikan dalam 24 jam.
sumber
set _time=%time: =0%
memperbaiki masalah satu digit jam - ganti di kedua tempat.Di direktori tempat program Anda, ketik
notepad mytimer.bat
, klik 'ya' untuk membuat file baru.Rekatkan kode di bawah ini, ganti
YourApp.exe
dengan program Anda, lalu simpan.Ketikkan
mytimer.bat
baris perintah lalu tekan Enter.sumber
kode saya memberi Anda waktu berjalan dalam milidetik, hingga 24 jam, tidak sensitif lokal, dan menyumbang nilai negatif jika kode berjalan hingga tengah malam. menggunakan ekspansi tertunda, dan harus disimpan dalam file cmd / bat.
sebelum kode Anda:
setelah kode Anda:
jika Anda ingin menjalankan waktu dalam format HH: mm: ss.000, tambahkan:
variabel
t2
menahan waktu berjalan Anda, Anda bisaecho %t2%
menampilkannya.sumber
Setelah Perl menginstal solusi perekrutan yang tersedia, jalankan:
STDERR datang sebelum detik yang diukur
sumber
Menggunakan sub untuk mengembalikan waktu dalam seperseratus detik
sumber
TIMER "Bersandar dan Berarti" dengan format Regional, 24jam dan dukungan input campuran
Mengadaptasi badan metode substitusi Aacini , tanpa IF, hanya satu UNTUK (perbaikan regional saya)
1: File timer.bat ditempatkan di suatu tempat di% PATH% atau direktori saat ini
Penggunaan:
timer & echo start_cmds & timeout / t 3 & echo end_cmds & timer
timer & timer "23: 23: 23,00"
timer "23: 23: 23,00" & timer
timer "13.23.23,00" & timer "03: 03: 03.00"
timer & timer "0: 00: 00.00" no & cmd / v: on / c echo hingga tengah malam =! Timer_end!
Input sekarang dapat dicampur, untuk yang tidak mungkin, tetapi perubahan format waktu yang mungkin selama eksekusi
2: Fungsi : timer yang dibundel dengan skrip batch (contoh penggunaan di bawah):
:: untuk mengujinya, salin-tempel bagian kode di atas dan di bawah
CE, DE dan CS, singkatan DS untuk titik akhir, titik akhir dan titik dua, set titik - digunakan untuk dukungan format campuran
sumber
Script berikut mengemulasi * nix epoch time, tetapi bersifat lokal dan regional. Ini harus menangani kasus tepi kalender termasuk tahun kabisat. Jika Cygwin tersedia, nilai zaman dapat dibandingkan dengan menentukan opsi Cygwin .
Saya di EST dan perbedaannya adalah 4 jam yang relatif benar. Ada beberapa solusi menarik untuk menghapus TZ dan dependensi regional, tetapi tidak ada yang sepele yang saya perhatikan.
sumber
Solusi menggunakan PHP murni untuk cmd dan satu env. variabel:
tidak perlu untuk cygwin atau utilitas yang tidak tepercaya. Berguna ketika PHP tersedia secara lokal
format presisi dan keluaran dapat dengan mudah diubah
ide yang sama dapat diporting untuk PowerShell
sumber