Cara termudah untuk mengatur waktu alat baris perintah


9

Apa cara termudah / tercepat untuk menghitung waktu alat baris perintah?

Itu tidak harus super akurat (+/- detik tidak apa-apa) karena saya berharap ini akan memakan waktu beberapa menit atau bahkan 1 jam +. Dan menulis file batch juga baik-baik saja. Selain itu, tidak perlu melakukan perhitungan tepat waktu, cukup tampilkan waktu mulai dan waktu selesai.


Mungkin milik Stackoverflow.
Joey

2
Jika saya harus "memprogram" sesuatu untuk menjalankannya ... solusinya terlalu rumit. Harus ada beberapa alat baris perintah atau solusi batch sederhana untuk ini, bukan?
Slolife

Lebih mungkin terjadi pada Serverfault.
Kirill V. Lyadvinsky

Umumnya OS hanya peduli tentang berapa banyak waktu yang digunakan CPU. Jawaban saya di bawah ini akan melakukan apa yang Anda inginkan. Saya hanya menggunakan file log untuk menyimpan informasi.
Axxmasterr

Jawaban:


19

Saya biasanya menggunakan

echo.|time & my_command & echo.|time

ketika saya tidak memiliki hal lain di tangan. Ini menyebabkan keluaran seperti berikut:

> echo. | waktu & ping -n 4 localhost> nul & echo. | waktu
Waktu saat ini adalah: 18: 42: 34,63
Masukkan waktu baru:
Waktu saat ini adalah: 18: 42: 37,68
Masukkan waktu baru:

Tidak cantik dan bisa dibuat lebih cantik dengan memipis ke findstr:

echo.|time|findstr current & ping -n 4 localhost > nul & echo.|time|findstr current

Jika Anda telah menunda ekspansi yang diaktifkan secara default (atau mulai cmd dengan /v:onsebagai argumen), Anda juga dapat menggunakan echo !time!tanpa harus menggunakan peretasan jelek dengan pengalihan input.

Jika Anda ingin menggunakan file batch, Anda dapat melakukannya seperti ini:

@echo Start time: %time%
@%*>nul 2>nul
@echo End time: %time%

Saya telah menambahkan redirection ke nul untuk stdout dan stderr di sini, karena kalau tidak, mungkin akan sulit untuk menemukan garis awal dan akhir. Anda dapat menghapus ini jika ini bukan urusan Anda.

Tetapi saat ini saya lebih banyak menggunakan TimeThis - yang sekarang sudah dihapus, sayangnya.

PowerShell juga menawarkan cara:

Measure-Command { my_command }

tetapi Anda harus berhati-hati dengan hal-hal yang bergantung pada direktori kerja atau pengalihan. Agar mereka dapat bekerja dengan benar, Anda mungkin perlu sedikit tipu daya:

@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

Ini dapat dijalankan dengan cara yang sama seperti timethis, pastikan untuk menghindari tanda kutip ganda dengan \"jika mereka diperlukan di baris perintah (sama timethisjuga). Output yang dihasilkan serupa. Pengalihan tidak akan berhasil.


TimeThis dari kit sumber daya Windows 2000 dan tidak lagi tersedia; pada tahun 2003 Resource Kit adalah TimeIt, yang tidak berfungsi pada Win7 64bit saya. Untuk solusi PowerShell lihat superuser.com/questions/228056/…
pesche

Itu menyebalkan. Saya masih memiliki executable tergeletak di sini sejak dulu.
Joey

@pesche: Saya menambahkan file batch yang dapat bertindak sebagai pengganti drop-in untuk timethis.
Joey

4

Anda dapat menggunakan penjadwal sistem untuk menjalankan perintah untuk Anda.

Control Panel -> Tugas Terjadwal -> buat ....

Arahkan saja tugas terjadwal pada perintah yang ingin Anda jalankan dan harus melakukan apa yang Anda inginkan.

Jika Anda ingin membuat file log yang menyimpan informasi status waktu, Anda mungkin ingin mempertimbangkan untuk melakukan sesuatu yang mirip dengan skrip di atas.

Saya menggunakan utilitas yang disebut "sekarang" untuk melakukan ini karena akan menggemakan tanggal dan waktu. Ini sangat berguna untuk skrip baris perintah yang ingin Anda lacak dalam file log tetapi tidak memiliki kecerdasan untuk menyertakan tanggal / waktu secara asli. Sangat berguna karena tidak peduli dengan respons dan hilang ketika Anda selesai dengan itu.

Sekarang Utlity dapat ditemukan di sini

Contoh skrip adalah ...

echo -------------- >>logfile.txt
now Process Starting>> logfile.txt
<commandhere> <target> >> logfile.txt
now process Ending >> logfile.txt
echo -------------- >> logfile.txt

Output sampel akan terlihat seperti

--------------
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
--------------

4

Pilihan lain adalah dengan menggunakan timeperintah /tyang akan menempatkan waktu saat ini ke konsol (atau redirect ke log) tanpa meminta waktu yang akan ditetapkan. ada batasan dalam hal itu akan memberi Anda jam, menit, tetapi bukan detik dan milidetik.

call time /t  > myLog.log
call mybat   >> myLog.log
call time /t >> myLog.log

Sayangnya, "waktu / t" tidak menghasilkan detik, hanya "jam: menit pagi / malam".
slolife

benar Anda, saya telah memperbarui jawabannya.
akf

1

Jika Anda memiliki PowerShell, Anda dapat melakukan ini (semua satu baris, putus untuk dibaca):

PS C:\> $startTime=Get-Date;ping /n 4 localhost;$endTime=Get-Date;
        echo "Finished in $(($endTime-$startTime).ToString())"

Atau simpan ini ke file untuk digunakan kembali dengan lebih mudah.

# 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())";

1
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

15,5 ms dan 10,2 ms menggunakan Ctrl + v dari clipboard


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.