663 Stimmen

Wie messe ich die Ausführungszeit eines Befehls auf der Windows-Befehlszeile?

Gibt es eine integrierte Möglichkeit, die Ausführungszeit eines Befehls in der Windows-Befehlszeile zu messen?

18voto

Murali Krishnan Punkte 195

Ich verwende Windows XP und aus irgendeinem Grund funktioniert timeit.exe bei mir nicht. Ich habe eine Alternative gefunden - PTIME. Das funktioniert sehr gut.

http://www.pc-tools.net/win32/ptime/

Beispiel -

C:\> ptime

ptime 1.0 für Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes 

Syntax: ptime command [arguments ...]

ptime wird das angegebene Kommando ausführen und die Ausführungszeit
(Laufzeit) in Sekunden messen, genau auf 5 Millisekunden oder besser. Es ist ein
automatischer Prozess Timer oder Programm Timer.

C:\> ptime cd

ptime 1.0 für Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes 

===  cd ===
C:\

Ausführungszeit: 0.015 s

0 Stimmen

Funktioniert auch gut auf Windows 8.1. Ich habe meinen in timer.exe umbenannt, weil ich mir den Namen ptime nie merken kann.

12voto

driblio Punkte 127

Solange es nicht länger als 24 Stunden dauert...

@echo off

set starttime=%TIME%
set startcsec=%STARTTIME:~9,2%
set startsecs=%STARTTIME:~6,2%
set startmins=%STARTTIME:~3,2%
set starthour=%STARTTIME:~0,2%
set /a starttime=(%starthour%*60*60*100)+(%startmins%*60*100)+(%startsecs%*100)+(%startcsec%)

:TimeThis
ping localhost 

set endtime=%time%
set endcsec=%endTIME:~9,2%
set endsecs=%endTIME:~6,2%
set endmins=%endTIME:~3,2%
set endhour=%endTIME:~0,2%
if %endhour% LSS %starthour% set /a endhour+=24
set /a endtime=(%endhour%*60*60*100)+(%endmins%*60*100)+(%endsecs%*100)+(%endcsec%)

set /a timetaken= ( %endtime% - %starttime% )
set /a timetakens= %timetaken% / 100
set timetaken=%timetakens%.%timetaken:~-2%

echo.
echo Dauer: %timetaken% Sek.

5 Stimmen

Beeindruckend, aber ich glaube nicht, dass es funktioniert, wenn es eine 08 oder 09 in den Start- oder Endzeiten gibt, da diese als oktale Zahlen interpretiert werden. Meine Antwort behandelt das :)

10voto

Saddam M Punkte 91

Je nach der Version von Windows, die Sie verwenden, wird einfach das Ausführen von bash Sie in den Bash-Modus versetzen. Dies ermöglicht Ihnen die Verwendung einer Vielzahl von Befehlen, die in PowerShell direkt nicht verfügbar sind (wie der time Befehl). Das Timing Ihres Befehls ist jetzt so einfach wie:

# Die Klausel  (ohne die spitzen Klammern) kennzeichnet den Befehl, den Sie ausführen möchten.
$ time 

Hinweis: Sie können ganz einfach aus dem Bash-Modus aussteigen und wieder in Ihre Hauptshell zurückkehren, indem Sie exit im Bash-Modus ausführen.

Dies hat bei mir perfekt funktioniert (Windows 10), nachdem ich andere Methoden ausprobiert habe (wie Measure-Command), die manchmal unerwünschte Statistiken produzieren. Hoffentlich funktioniert das auch bei Ihnen.

4 Stimmen

Bis Windows 10 1607 die beste Antwort.

10voto

Martin Moene Punkte 919

Es gibt auch TimeMem (März 2012):

Dies ist ein Windows-Dienstprogramm, das ein Programm ausführt und dessen Ausführungszeit, Speicherverbrauch und E/A-Statistiken anzeigt. Es ähnelt funktional dem Unix-Dienstprogramm Zeit.

9voto

Nadu Punkte 2254

Hier ist ein

Postfix-Timer-Version:

Beispiel für die Verwendung:

timeout 1 | TimeIt.cmd

Ausführung dauerte ~969 Millisekunden.

Kopieren und einfügen in einen Editor wie z.B. Notepad++ und speichern als TimeIt.cmd:

:: --- TimeIt.cmd ----
    @echo off
    setlocal enabledelayedexpansion

    call :ShowHelp

    :: Setze Startzeit des Pipelines
    set t1=%time%

    :: Warte auf stdin
    more

    :: Setze Zeitpunkt, an dem stdin bereit war
    set t2=!time!

    :: Berechne Differenz
    Call :GetMSeconds Tms1 t1
    Call :GetMSeconds Tms2 t2

    set /a deltaMSecs=%Tms2%-%Tms1%
    echo Ausführung dauerte ~ %deltaMSecs% Millisekunden.

    endlocal
goto :eof

:GetMSeconds
    Call :Parse        TimeAsArgs %2
    Call :CalcMSeconds %1 %TimeAsArgs%

goto :eof

:CalcMSeconds
    set /a %1= (%2 * 3600*1000) + (%3 * 60*1000) + (%4 * 1000) + (%5)
goto :eof

:Parse

    :: Maske für Zeit wie " 0:23:29,12"
    set %1=!%2: 0=0!

    :: Ersetze Zeit-Trennzeichen mit " "
    set %1=!%1::= !
    set %1=!%1:.= !
    set %1=!%1:,= !

    :: Lösche führende Null - damit sie später nicht als oktal interpretiert wird
    set %1=!%1: 0= !
goto :eof

:ShowHelp
    echo %~n0 V1.0 [Dez 2015]
    echo.
    echo Verwendung: ^ ^| %~nx0
    echo.
    echo Warte darauf, dass die Pipeline bereit ist... :)
    echo  (Drücken Sie Strg+Z ^ zum Abbrechen)
goto :eof

^ - Basierend auf 'Daniel Sparks' Version

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X