Czy istnieje wbudowany sposób pomiaru czasu wykonywania polecenia w wierszu poleceń systemu Windows?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
źródło
źródło
Odpowiedzi:
Jeśli używasz systemu Windows 2003 (pamiętaj, że Windows Server 2008 i nowsze wersje nie są obsługiwane), możesz użyć zestawu Windows Server 2003 Resource Kit, który zawiera timeit.exe, który wyświetla szczegółowe statystyki wykonania. Oto przykład synchronizacji polecenia „timeit -?”:
Możesz uzyskać TimeIt w zestawie Windows 2003 Resource Kit. Pobierz tutaj .
źródło
Alternatywnie, Windows PowerShell ma wbudowane polecenie podobne do polecenia „czas” Basha. Nazywa się to „Measure-Command”. Musisz upewnić się, że PowerShell jest zainstalowany na komputerze, na którym jest uruchomiony.
Przykładowe dane wejściowe:
Przykładowe dane wyjściowe:
źródło
.exe
w bieżącym katalogu, użyj tego:Measure-Command { .\your.exe }
. PowerShell najwyraźniej nie uruchamia rzeczy,pwd
chyba że jest to wyraźnie nakazane.<stdout>
wyników polecenia zawartego w nawiasach klamrowych!Jeśli chcesz
Spróbuj skopiować następujący skrypt do nowego pliku wsadowego (np. Timecmd.bat ):
Stosowanie
Jeśli umieścisz timecmd.bat w katalogu na swojej ścieżce, możesz wywołać go z dowolnego miejsca takiego jak to:
Na przykład
Jeśli chcesz wykonać przekierowanie danych wyjściowych, możesz zacytować polecenie w następujący sposób:
Powinno to obsługiwać polecenia uruchamiane przed północą i po północy, ale dane wyjściowe będą niepoprawne, jeśli polecenie będzie działać przez 24 godziny lub dłużej.
źródło
timecmd pause
, a to zawsze skutkuje 1,00 sek., 2,00 sek., 4,00 sek ... nawet 0,00 sek! Windows 7.delims=:.
nadelims=:.,
, a potem powinno działać „na całej planszy”.set start=10:10:10.10
set end=10:11:10.09
I wyświetli:command took 0:1:-1.99 (59.99s total)
Powinieneś odwrócić kolejność 4 linii, które wykonują porównania „lss 0”, aby przenoszenie przebiegało poprawnie od niskich do wysokich cyfr płciowych. Następnie wynikcommand took 0:0:59.99 (59.99s total)
Hehe, najprostszym rozwiązaniem może być to:
Działa to na każdym systemie Windows od razu po wyjęciu z pudełka.
W przypadku aplikacji korzystającej z danych wyjściowych konsoli wygodne może być przechowywanie czasu rozpoczęcia w zmiennej tymczasowej:
źródło
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Niestety, nie mogłem uzyskać nowych linii w komentarzu)set
do wykonania matematyki.;-)
Och, czekaj, nieważne, już to zrobiłeś poniżej.Małe rozszerzenie odpowiedzi Casey.K na temat korzystania
Measure-Command
z programu PowerShell :Możesz wywołać PowerShell ze standardowego wiersza poleceń, w następujący sposób:
Spowoduje to zjedzenie standardowego wyjścia, ale można temu zapobiec, dodając w
| Out-Default
ten sposób program PowerShell:Lub z wiersza polecenia:
Oczywiście możesz zawinąć to w plik skryptu
*.ps1
lub*.bat
.źródło
measureTime.bat "c:\program files\some dir\program.exe"
Jednowierszowy, którego używam w systemie Windows Server 2008 R2 to:
Tak długo, jak moja komenda nie wymaga cudzysłowów (co przekręca się przy przetwarzaniu ofert cmd). Ma
/v:on
to na celu umożliwienie niezależnej oceny dwóch różnych wartości CZASU, a nie jednorazowego wykonania polecenia.źródło
^
w cmd (jak^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Zobacz także tę odpowiedź .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Jeśli masz otwarte okno poleceń i ręcznie wywołujesz polecenia, możesz wyświetlić znacznik czasu w każdym monicie, np
Daje ci coś takiego:
Jeśli masz mały skrypt wsadowy, który wykonuje twoje polecenia, przed każdą komendą miej pusty wiersz, np
Czas wykonania każdego polecenia można obliczyć na podstawie informacji o czasie w monicie. Prawdopodobnie najlepiej byłoby przesłać dane wyjściowe do pliku tekstowego w celu dalszej analizy:
źródło
Ponieważ inni zalecają instalowanie rzeczy takich jak freeware i PowerShell, możesz również zainstalować Cygwin , który dałby ci dostęp do wielu podstawowych poleceń Uniksa, takich jak czas :
Nie jestem pewien, ile dodaje narzut Cygwin.
źródło
Nie tak elegancki jak niektóre funkcje Uniksa, ale utwórz plik cmd, który wygląda następująco:
Zostaną wyświetlone czasy rozpoczęcia i zakończenia w następujący sposób:
źródło
time
ma/t
opcję, która wyświetla aktualny czas systemowy, bez monitowania o wprowadzenie nowego czasu. Jednak gdy to zrobisz, wyświetla tylko godziny i minuty, co może nie być wystarczające dla niektórych zastosowań. (Zobacz odpowiedź Johna Snowa na to pytanie.)time /T
jest użyteczny tylko wtedy, gdy proces trwa kilka minut!time < nul
jest brzydszy, ale bardziej precyzyjny.echo %time%
który zapewnia ten sam format i precyzjętime < nul
, ale unikasz danychEnter the new time:
wyjściowych ...wmic os get LocalDateTime
Używam darmowego oprogramowania o nazwie „GS Timer”.
Utwórz plik wsadowy w ten sposób:
Jeśli potrzebujesz zestawu czasów, po prostu potokuj wyjście timera / s do pliku .txt.
Możesz go pobrać tutaj: Darmowe narzędzia Damm Gammadyne
Rozdzielczość wynosi 0,1 sekundy.
źródło
Korzystam z systemu Windows XP iz jakiegoś powodu timeit.exe nie działa dla mnie. Znalazłem inną alternatywę - PTIME. To działa bardzo dobrze.
http://www.pc-tools.net/win32/ptime/
Przykład -
źródło
Jest też TimeMem (marzec 2012):
źródło
Tak długo, jak nie trwa to dłużej niż 24 godziny ...
źródło
Tutaj jest
Wersja timera Postfix:
Przykład użycia:
limit czasu 1 | TimeIt.cmd
Skopiuj i wklej to do jakiegoś edytora, np. Notepad ++ i zapisz jako TimeIt.cmd :
^ - Na podstawie wersji „Daniel Sparks”
źródło
Alternatywą dla pomiaru czasu jest po prostu „Get-Date”. Nie masz problemów z przekazywaniem danych wyjściowych i tak dalej.
Wynik:
źródło
Jest to jedna linijka, która pozwala uniknąć opóźnionego rozszerzania , co mogłoby zakłócić niektóre polecenia:
Wynik jest podobny do:
Na długoterminowe testy zastąpić
$T
przez$D, $T
i%TIME%
przez%DATE%, %TIME%
zawierać datę.Aby użyć tego w pliku wsadowym , zamień
%Z
na%%Z
.Aktualizacja
Oto ulepszony jednowarstwowy (bez opóźnionego rozszerzenia ):
Dane wyjściowe wyglądają podobnie do tego:
To podejście nie obejmuje procesu tworzenia nowego
cmd
wyniku aniprompt
polecenia.źródło
W zależności od używanej wersji systemu Windows samo uruchomienie
bash
spowoduje przejście do trybu Bash. Umożliwi to użycie zestawu poleceń, które nie są bezpośrednio dostępne w programie PowerShell (takich jaktime
polecenie). Odmierzenie czasu polecenia jest teraz tak proste, jak wykonanie:Działa to dla mnie idealnie (Windows 10) po wypróbowaniu innych metod (takich jak
Measure-Command
), które czasami generują niepożądane statystyki. Mam nadzieję, że to również dla ciebie działa.źródło
W przypadku, gdy ktoś tu przyszedł i szuka odpowiedzi na to pytanie, dostępna jest funkcja Windows API
GetProcessTimes()
. Napisanie małego programu C, który uruchomi polecenie, wykona to wywołanie i zwróci czasy procesu, nie wygląda na zbyt wiele pracy.źródło
To jest komentarz / edycja do miłej
timecmd.bat
odpowiedzi Luke'a SampsonaW niektórych konfiguracjach ograniczniki mogą się różnić. Następująca zmiana powinna obejmować co najmniej większość krajów zachodnich.
The
%time%
milisekund działa na moim systemie po dodając, że „”(* ponieważ strona nie pozwala na komentowanie i nie śledzi tożsamości, nawet jeśli zawsze używam tego samego e-maila gościa, który w połączeniu z ipv6 ip i odciskiem palca przeglądarki powinien wystarczyć do jednoznacznej identyfikacji bez hasła)
źródło
Oto moja metoda, bez konwersji i bez ms. Przydatne jest określenie czasu trwania kodowania (ograniczony do 24 godzin):
źródło
źródło
Poniższy skrypt używa tylko „cmd.exe” i wyświetla liczbę milisekund od momentu utworzenia potoku do zakończenia procesu poprzedzającego skrypt. tzn. wpisz polecenie i potokuj do skryptu. Przykład: „timeout 3 | runtime.cmd” powinien dać coś w rodzaju „2990”. Jeśli potrzebujesz zarówno danych wyjściowych środowiska wykonawczego, jak i danych wyjściowych stdin, przekieruj stdin przed potokiem - np .: „katalog / s 1> temp.txt | runtime.cmd” zrzuci dane wyjściowe polecenia „dir” na „temp.txt” i wydrukuje środowisko wykonawcze na konsoli.
źródło
call :calc
. Zrobiłem to tutaj. link code get to co jest ładniejsze w ten sposób. : DOdpowiedź driblio może być nieco krótsza (choć mało czytelna)
Według uwagi Luke'a Sampsona ta wersja jest bezpieczna ósemkowo, choć zadanie powinno zostać ukończone w ciągu 24 godzin.
źródło
set _time=%time: =0%
naprawia problem jednocyfrowej godziny - wymień w obu miejscach.W katalogu, w którym znajduje się twój program, wpisz
notepad mytimer.bat
„tak”, aby utworzyć nowy plik.Wklej poniższy kod, zastępując
YourApp.exe
go programem, a następnie zapisz.Wpisz
mytimer.bat
wiersz polecenia, a następnie naciśnij klawisz Enter.źródło
mój kod podaje czas działania w milisekundach, do 24 godzin, jest niewrażliwy na ustawienia regionalne i uwzględnia ujemne wartości, jeśli kod działa do północy. wykorzystuje opóźnioną ekspansję i powinien być zapisany w pliku cmd / bat.
przed twoim kodem:
po twoim kodzie:
jeśli chcesz mieć czas pracy w formacie GG: mm: ss.000, dodaj:
zmienna
t2
przechowuje twój czas działania, możeszecho %t2%
go wyświetlić.źródło
Po zainstalowaniu dostępnego rozwiązania wynajmu Perl uruchom:
STDERR występuje przed zmierzonymi sekundami
źródło
Wykorzystanie sub do zwrócenia czasu w setnych sekundach
źródło
„Lean and Mean” TIMER z formatem regionalnym, 24-godzinnym i mieszanym wejściem obsługuje
adaptację Aaciniego ciała metody zastępowania , bez IF, tylko jeden FOR (moja poprawka regionalna)
1: Plik timer.bat umieszczony gdzieś w% PATH% lub bieżącym katalogu
Zastosowanie:
timer i echo start_cmds i timeout / t 3 i echo end_cmds i timer
timer i timer „23: 23: 23,00„
timer ”23: 23: 23,00” i timer
timera „13.23.23,00” i timer „03: 03: 03.00”
timer i timer „0: 00: 00.00” no & cmd / v: on / c echo do północy =! Timer_end!
Dane wejściowe mogą być teraz mieszane w przypadku tych mało prawdopodobnych, ale możliwych zmian formatu czasu podczas wykonywania
2: Funkcja : licznik czasu dołączony do skryptu wsadowego (przykładowe użycie poniżej):
:: w celu przetestowania, skopiuj-wklej zarówno powyżej, jak i poniżej sekcji kodu
CE, DE i CS, DS oznaczają koniec dwukropka, koniec kropki i zestaw dwukropka, zestaw kropek - używany do obsługi formatu mieszanego
źródło
Poniższy skrypt emuluje czas epoki * nix, ale jest lokalny i regionalny. Powinien obsługiwać przypadki krawędzi kalendarza, w tym lata przestępne. Jeśli Cygwin jest dostępny, wartości epoki można porównać, określając opcję Cygwin .
Jestem w EST, a zgłoszona różnica wynosi 4 godziny, co jest względnie poprawne. Istnieje kilka ciekawych rozwiązań pozwalających usunąć TZ i zależności regionalne, ale nie zauważyłem nic trywialnego.
źródło
Rozwiązanie wykorzystujące czysty PHP dla cmd i jednego środowiska. zmienna:
nie potrzeba cygwina ani niezaufanych narzędzi. Przydatne, gdy PHP jest dostępne lokalnie
precyzję i format wyjściowy można łatwo dostosować
ten sam pomysł można przenieść do programu PowerShell
źródło