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:on
sebagai 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 timethis
juga). Output yang dihasilkan serupa. Pengalihan tidak akan berhasil.