Bir komut satırı aracını zamanlamanın en kolay yolu


9

Bir komut satırı aracını zamanlamanın en kolay / en hızlı yolu nedir?

Bunun dakikalar hatta 1 saat + almasını beklediğim için süper hassas olması gerekmiyor (+/- saniye tamam). Ve bir toplu iş dosyası yazmak da iyidir. Ayrıca, zamanında hesaplamalar yapmasına gerek yoktur, sadece başlangıç ​​saatini ve bitiş saatini görüntüleyin.


Stackoverflow'a ait olabilir.
Joey

2
Bunu çalıştırmak için bir şey "programlamak" zorunda kalırsam ... çözüm çok karmaşık. Bunun için bir komut satırı aracı veya basit bir toplu çözüm olmalı, değil mi?
slolife

Daha büyük olasılıkla Serverfault üzerinde.
Kirill V. Lyadvinsky

Genellikle işletim sistemi yalnızca ne kadar CPU zamanı kullandığını önemser. Aşağıdaki cevabım istediğini yapacak. Bilgileri saklamak için sadece bir günlük dosyası kullanıyorum.
Axxmasterr

Yanıtlar:


19

Genellikle kullanıyorum

echo.|time & my_command & echo.|time

elimde başka hiçbir şey olmadığında. Bu, aşağıdaki gibi çıktıya neden olur:

> echo. | time & ping -n 4 localhost> nul ve eko | zaman
Şuanki Zaman: 18: 42: 34,63
Yeni saati girin:
Şuanki Zaman: 18: 42: 37,68
Yeni saati girin:

Güzel değil ve findstr boru ile daha güzel yapılabilir:

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

Gecikmeli genişletmeyi varsayılan olarak etkinleştirdiyseniz (veya cmd'yi /v:onbağımsız değişken olarak başlattıysanız ) echo !time!, giriş yeniden yönlendirmeli çirkin saldırılara başvurmak zorunda kalmadan da kullanabilirsiniz .

Bir toplu iş dosyası kullanmak istiyorsanız, bunu şu şekilde yapabilirsiniz:

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

Burada hem stdout hem de stderr için nul'e yeniden yönlendirme ekledim, çünkü aksi takdirde başlangıç ​​ve bitiş çizgilerini bulmak zor olabilir. Bu sizi ilgilendirmiyorsa bunu kaldırabilirsiniz.

Ama günümüzde çoğunlukla TimeThis kullanıyorum - ki şu anda üzülerek kaldırıldı.

PowerShell de bir yol sunar:

Measure-Command { my_command }

ancak çalışma dizinine veya yönlendirmeye dayanan şeylere dikkat etmeniz gerekir. Doğru çalışması için biraz hile yapmanız gerekebilir:

@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

Bu , komut satırında gerekiyorsa timethisçift ​​tırnaklardan kaçmayı unutmayın \"(aynı şekilde timethis). Üretilen çıktı benzerdir. Yine de yönlendirmeler işe yaramaz.


TimeThis, Windows 2000 kaynak kitindendir ve artık kullanılamaz; 2003 yılında Resource Kit TimeIt, 64bit Win7 üzerinde çalışmadı. Bir PowerShell çözümü için bkz. Superuser.com/questions/228056/…
pesche

Bu berbat. Yine de eski zamanlardan beri buralarda çalıştırılabilir dosya var.
Joey

@pesche: Açılır yedek olarak kullanılabilecek bir toplu iş dosyası ekledim timethis.
Joey

4

Komutu sizin için çalıştırmak için sistem zamanlayıcıyı kullanabilirsiniz.

Denetim Masası -> Zamanlanmış Görevler -> yeni oluştur ...

Zamanlanan görevi çalıştırmak istediğiniz komuta yönlendirin ve istediğinizi yapması gerekir.

Zaman durumu bilgilerini depolayan bir günlük dosyası oluşturmak istiyorsanız, yukarıdaki komut dosyasına benzer bir şey yapmayı düşünebilirsiniz.

Ben tarih ve saati yankı gibi bunu yapmak için "şimdi" adlı bir yardımcı programı kullanın. Bu, günlük dosyalarında takip etmek istediğiniz ancak yerel olarak bir tarih / saat içermeyen akıllı dosyalardan yoksun bırakmak istediğiniz komut satırı komut dosyaları için çok kullanışlıdır. Çok kullanışlı bir yanıt umurumda değil ve onunla işiniz bittiğinde gider.

Şimdi Utlity Burada bulunabilir

Senaryo örneği ...

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

Örnek çıktısı

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

başka bir seçenek, geçerli saati ayarlanacak zaman sorulmadan konsola gönderecek (veya günlüğe yeniden yönlendirecek) timekomutu kullanmaktır /t. saat, dakika, ancak saniye ve milisaniye vermeyecek bir sınırlama vardır.

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

Ne yazık ki, "time / t" saniye çıktısı vermiyor, sadece "hour: minute am / pm".
slolife

haklısın, cevabı güncelledim.
akf

1

Powershell'iniz varsa, bunu yapabilirsiniz (hepsi bir satır, okunabilirlik için ayrılmış):

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

Veya daha kolay yeniden kullanmak için bunu bir dosyaya kaydedin.

# 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

Panodan Ctrl + v kullanarak 15,5ms ve 10,2ms


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.