Gibt es eine integrierte Möglichkeit, die Ausführungszeit eines Befehls in der Windows-Befehlszeile zu messen?
windows
batch-file
time
cmd
windows-server-2003
Kuroki Kaze
quelle
quelle
Antworten:
Wenn Sie Windows 2003 verwenden (beachten Sie, dass Windows Server 2008 und höher nicht unterstützt werden), können Sie das Windows Server 2003 Resource Kit verwenden, das timeit.exe enthält und detaillierte Ausführungsstatistiken anzeigt. Hier ist ein Beispiel für das Timing des Befehls "timeit -?":
Sie können TimeIt im Windows 2003 Resource Kit herunterladen. Laden Sie es hier herunter .
quelle
Alternativ verfügt Windows PowerShell über einen integrierten Befehl, der dem Befehl "time" von Bash ähnelt. Es heißt "Measure-Command". Sie müssen sicherstellen, dass PowerShell auf dem Computer installiert ist, auf dem es ausgeführt wird.
Beispiel Eingabe:
Beispielausgabe:
quelle
.exe
im aktuellen Verzeichnis durchführen, verwenden Sie Folgendes :Measure-Command { .\your.exe }
. PowerShell führt anscheinend keine Dinge aus, espwd
sei denn, es wird ausdrücklich dazu aufgefordert.<stdout>
den Ergebnissen des Befehls in den geschweiften Klammern zurück!Falls Sie es wollen
Versuchen Sie, das folgende Skript in eine neue Batchdatei (z. B. timecmd.bat ) zu kopieren :
Verwendungszweck
Wenn Sie timecmd.bat in einem Verzeichnis in Ihrem Pfad ablegen, können Sie es von einem beliebigen Ort aus aufrufen:
Z.B
Wenn Sie eine Ausgabeumleitung durchführen möchten, können Sie den Befehl wie folgt zitieren:
Dies sollte Befehle verarbeiten, die von vor bis nach Mitternacht ausgeführt werden. Die Ausgabe ist jedoch falsch, wenn Ihr Befehl 24 Stunden oder länger ausgeführt wird.
quelle
timecmd pause
und es ergeben sich immer 1,00 Sekunden, 2,00 Sekunden, 4,00 Sekunden ... sogar 0,00 Sekunden! Windows 7.delims=:.
zudelims=:.,
und dann sollte es "auf ganzer Linie " funktionieren.set start=10:10:10.10
set end=10:11:10.09
Und es wird ausgegeben:command took 0:1:-1.99 (59.99s total)
Sie sollten die Reihenfolge der 4 Zeilen umkehren, die "lss 0" -Vergleiche durchführen, damit der Übertrag korrekt von niedrigen zu hohen sexagesimalen Ziffern fortschreitet. Dann wird die Ausgabe:command took 0:0:59.99 (59.99s total)
Hehe, die einfachste Lösung könnte folgende sein:
Dies funktioniert unter jedem Windows sofort.
Bei einer Anwendung, die die Konsolenausgabe verwendet, kann es zweckmäßig sein, die Startzeit in einer temporären Variablen zu speichern:
quelle
set startTime=%time% \n YourApp.exe \n echo Start Time: %startTime% \n echo Finish Time: %time%
(Leider konnten keine Zeilenumbrüche im Kommentar angezeigt werden)set
Sie die Mathematik machen.;-)
Oh, warte, egal, das hast du unten schon getan.Nur eine kleine Erweiterung der Antwort von Casey.K zur Verwendung
Measure-Command
von PowerShell :Sie können PowerShell wie folgt über die Standard-Eingabeaufforderung aufrufen:
Dies wird die Standardausgabe verschlingen, aber Sie können dies verhindern, indem Sie Folgendes
| Out-Default
aus PowerShell hinzufügen :Oder an einer Eingabeaufforderung:
Natürlich können Sie dies in eine Skriptdatei
*.ps1
oder einbinden*.bat
.quelle
measureTime.bat "c:\program files\some dir\program.exe"
Der Einzeiler, den ich in Windows Server 2008 R2 verwende, ist:
Solange mycommand keine Anführungszeichen benötigt (was mit der Anführungszeichenverarbeitung von cmd verschraubt wird). Damit
/v:on
soll ermöglicht werden, dass die beiden unterschiedlichen TIME-Werte bei der Ausführung des Befehls unabhängig voneinander und nicht einmal ausgewertet werden.quelle
^
in cmd (wie^"
)cmd /v:on /c echo !TIME! & echo "Quoted mycommand" & cmd /v:on /c echo !TIME!
.echo %time% & *mycommand* & call echo %^time%
. Siehe auch diese Antwort .cmd /v:on /c "mycommand & echo begin=%time% endtime=!time!"
Wenn Sie ein Befehlsfenster geöffnet haben und die Befehle manuell aufrufen, können Sie an jeder Eingabeaufforderung einen Zeitstempel anzeigen, z
Es gibt Ihnen so etwas wie:
Wenn Sie ein kleines Stapelskript haben, das Ihre Befehle ausführt, müssen Sie vor jedem Befehl eine leere Zeile einfügen, z
Sie können die Ausführungszeit für jeden Befehl anhand der Zeitinformationen in der Eingabeaufforderung berechnen. Am besten leiten Sie die Ausgabe zur weiteren Analyse an eine Textdatei weiter:
quelle
Da andere empfehlen, Dinge wie Freeware und PowerShell zu installieren, können Sie auch Cygwin installieren , wodurch Sie auf viele grundlegende Unix-Befehle wie time zugreifen können :
Ich bin mir nicht sicher, wie viel Overhead Cygwin hinzufügt.
quelle
Nicht ganz so elegant wie einige der Funktionen unter Unix, aber erstellen Sie eine Cmd-Datei, die wie folgt aussieht:
Das zeigt die Start- und Stoppzeiten wie folgt an:
quelle
time
über eine/t
Option, die nur die aktuelle Systemzeit anzeigt, ohne dass Sie zur Eingabe einer neuen Zeit aufgefordert werden. Wenn Sie dies tun, werden jedoch nur Stunden und Minuten angezeigt, was für einige Verwendungen möglicherweise nicht ausreicht. (Siehe John Snow Antwort auf diese Frage.)time /T
ist nur verwendbar, wenn der Prozess mehrere Minuten läuft!time < nul
ist hässlicher aber genauer.echo %time%
, das das gleiche Format und die gleiche Präzision wietime < nul
bietet, aber Sie vermeiden dieEnter the new time:
Ausgabe ...wmic os get LocalDateTime
Ich benutze Freeware namens "GS Timer".
Erstellen Sie einfach eine Batch-Datei wie folgt:
Wenn Sie eine Reihe von Zeiten benötigen, leiten Sie einfach die Ausgabe von Timer / s in eine TXT-Datei.
Sie können es hier herunterladen : Gammadynes kostenlose DOS-Dienstprogramme
Die Auflösung beträgt 0,1 Sekunden.
quelle
Ich verwende Windows XP und aus irgendeinem Grund funktioniert timeit.exe bei mir nicht. Ich habe eine andere Alternative gefunden - PTIME. Das funktioniert sehr gut.
http://www.pc-tools.net/win32/ptime/
Beispiel -
quelle
Es gibt auch TimeMem (März 2012):
quelle
Solange es nicht länger als 24 Stunden dauert ...
quelle
Hier ist ein
Postfix-Timer-Version:
Anwendungsbeispiel:
Zeitüberschreitung 1 | TimeIt.cmd
Kopieren Sie diese und fügen Sie sie in einen Editor wie z. B. Notepad ++ ein und speichern Sie sie als TimeIt.cmd :
^ - Basierend auf der 'Daniel Sparks'-Version
quelle
Eine Alternative zur Messzeit ist einfach "Get-Date". Sie haben diesen Ärger mit der Weiterleitungsausgabe und so weiter nicht.
Ausgabe:
quelle
Dies ist ein Einzeiler, der eine verzögerte Expansion vermeidet , die bestimmte Befehle stören könnte:
Die Ausgabe ist so etwas wie:
Für langfristige ersetzen Tests
$T
durch$D, $T
und%TIME%
durch%DATE%, %TIME%
das Datum enthalten.Um dies in einer Batchdatei zu verwenden , ersetzen Sie
%Z
durch%%Z
.Aktualisieren
Hier ist ein verbesserter Einzeiler (auch ohne verzögerte Erweiterung ):
Die Ausgabe sieht ungefähr so aus:
Dieser Ansatz beinhaltet weder den Prozess der Instanziierung eines neuen
cmd
im Ergebnis noch dieprompt
Befehle.quelle
Abhängig von der verwendeten Windows-Version werden Sie durch einfaches Ausführen
bash
in den Bash-Modus versetzt. Auf diese Weise können Sie eine Reihe von Befehlen verwenden, die in PowerShell nicht direkt verfügbar sind (wie dertime
Befehl). Das Timing Ihres Befehls ist jetzt so einfach wie das Ausführen von:Dies funktionierte perfekt für mich (Windows 10), nachdem ich andere Methoden (wie
Measure-Command
) ausprobiert hatte, die manchmal unerwünschte Statistiken erzeugen. Hoffe das funktioniert auch bei dir.quelle
Falls jemand anderes hierher gekommen ist, um eine Antwort auf diese Frage zu finden, gibt es eine Windows-API-Funktion namens
GetProcessTimes()
. Es sieht nicht nach zu viel Arbeit aus, ein kleines C-Programm zu schreiben, das den Befehl startet, diesen Aufruf ausführt und die Prozesszeiten zurückgibt.quelle
Dies ist ein Kommentar / eine Bearbeitung zu Luke Sampsons Nizza
timecmd.bat
und Antwort aufBei einigen Konfigurationen können die Trennzeichen unterschiedlich sein. Die folgende Änderung sollte mindestens die meisten westlichen Länder abdecken.
Das
%time%
Millisekunden funktionieren auf meinem System, nachdem das ',' hinzugefügt wurde.(* weil die Site keinen Kommentar zulässt und die Identität nicht gut verfolgt, obwohl ich immer dieselbe Gast-E-Mail verwende, die in Kombination mit IPv6-IP und Browser-Fingerabdruck ausreichen sollte, um sich ohne Passwort eindeutig zu identifizieren)
quelle
Hier ist meine Methode, keine Konvertierung und keine ms. Es ist nützlich, die Codierungsdauer zu bestimmen (jedoch auf 24 Stunden begrenzt):
quelle
quelle
Das folgende Skript verwendet nur "cmd.exe" und gibt die Anzahl der Millisekunden vom Erstellen einer Pipeline bis zum Beenden des Prozesses vor dem Skript aus. Geben Sie also Ihren Befehl ein und leiten Sie ihn an das Skript weiter. Beispiel: "timeout 3 | runtime.cmd" sollte ungefähr "2990" ergeben. Wenn Sie sowohl die Laufzeitausgabe als auch die stdin-Ausgabe benötigen, leiten Sie stdin vor der Pipe um - Beispiel: "dir / s 1> temp.txt | runtime.cmd" würde die Ausgabe des Befehls "dir" in "temp.txt" ausgeben. und würde die Laufzeit auf der Konsole drucken.
quelle
call :calc
. Das habe ich hier gemacht. Link Code wird auf diese Weise etwas schöner. : DDie Antwort von driblio kann etwas kürzer gemacht werden (obwohl nicht viel lesbar)
Nach der Bemerkung von Luke Sampson ist diese Version oktalsicher, obwohl die Aufgabe in 24 Stunden erledigt sein sollte.
quelle
set _time=%time: =0%
behebt das einstellige Stundenproblem - an beiden Stellen ersetzen.Geben Sie in dem Verzeichnis, in dem sich Ihr Programm befindet,
notepad mytimer.bat
auf "Ja" ein, um eine neue Datei zu erstellen.Fügen Sie den folgenden Code ein, ersetzen Sie ihn
YourApp.exe
durch Ihr Programm und speichern Sie ihn.Geben Sie
mytimer.bat
in der Befehlszeile und drücken Sie die Eingabetaste.quelle
Mein Code gibt Ihnen die Laufzeit in Millisekunden bis zu 24 Stunden an. Er ist unempfindlich gegen das Gebietsschema und berücksichtigt negative Werte, wenn der Code bis Mitternacht läuft. Es verwendet eine verzögerte Erweiterung und sollte in einer cmd / bat-Datei gespeichert werden.
vor Ihrem Code:
nach deinem Code:
Wenn Sie eine Laufzeit im Format HH: mm: ss.000 wünschen, fügen Sie Folgendes hinzu:
Variable
t2
hält Ihre Laufzeit, Sie könnenecho %t2%
es anzeigen.quelle
Nachdem Perl die verfügbare Mietlösung installiert hat, führen Sie Folgendes aus:
STDERR kommt vor gemessenen Sekunden
quelle
Verwenden eines U-Bootes, um die Zeit in Hundertstelsekunden zurückzugeben
quelle
"Lean and Mean" TIMER mit Regionalformat, 24h und Unterstützung für gemischte Eingaben
Anpassung von Aacini Substitutionsmethoden-Body, keine IFs, nur ein FOR (mein regionaler Fix)
1: Die Datei timer.bat befindet sich irgendwo in% PATH% oder im aktuellen Verzeichnis
Verwendung:
Timer & Echo start_cmds & timeout / t 3 & echo end_cmds & timer
timer & timer "23: 23: 23,00"
timer "23: 23: 23,00" & timer
timer "13.23.23,00" & timer "03: 03: 03.00"
Timer & Timer "0: 00: 00.00" no & cmd / v: on / c Echo bis Mitternacht =! Timer_end!
Die Eingabe kann jetzt gemischt werden, um die unwahrscheinlichen, aber möglichen Änderungen des Zeitformats während der Ausführung zu berücksichtigen
2: Funktion : Timer , der mit dem Batch-Skript gebündelt ist (Beispielverwendung unten):
:: Um es zu testen, kopieren Sie die obigen und unteren Codeabschnitte
CE, DE und CS, DS stehen für Doppelpunktende, Punktende und Doppelpunktsatz, Punktsatz - werden für die Unterstützung gemischter Formate verwendet
quelle
Das folgende Skript emuliert die * nix-Epochenzeit, ist jedoch lokal und regional. Es sollte Kalenderkantenfälle einschließlich Schaltjahren behandeln. Wenn Cygwin verfügbar ist, können Epochenwerte durch Angabe der Option Cygwin verglichen werden .
Ich bin in EST und der gemeldete Unterschied beträgt 4 Stunden, was relativ korrekt ist. Es gibt einige interessante Lösungen, um die TZ und regionale Abhängigkeiten zu beseitigen, aber nichts Triviales, das mir aufgefallen ist.
quelle
Eine Lösung mit reinem PHP für cmd und eine env. Variable:
Keine Notwendigkeit für Cygwin oder nicht vertrauenswürdige Dienstprogramme. Nützlich, wenn PHP lokal verfügbar ist
Präzision und Ausgabeformat können leicht angepasst werden
Die gleiche Idee kann für PowerShell portiert werden
quelle