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?

0voto

Antoni Gual Via Punkte 692

Verwendung eines Subprogramms zur Rückgabe der Zeit in Hundertstel Sekunden

::tiemeit.cmd
@echo off
Setlocal EnableDelayedExpansion

call :clock 

::rufen Sie Ihren Befehl auf oder mehr > null, um diese Batch-Datei nach Ihrem Befehl zu pipen

call :clock

echo %timed%
pause
goto:eof

:clock
if not defined timed set timed=0
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do ( 
set /A timed = "(((1%%a - 100) * 60 + (1%%b - 100)) * 60 + (1%%c - 100))  * 100 + (1%%d - 100)- %timed%"
)
goto:eof

0 Stimmen

Dies gibt mir einen Fehler "unbalancierte Klammer", wenn die aktuelle Stunde zwischen 1 und 9 Uhr liegt (einschließlich). Der führende Leerschritt vor der einstelligen Zahl wirft dies durcheinander. Ersetze den ("%time%") durch ("%TIME: =0%"), um dies zu lösen.

0voto

AveYo Punkte 151

"Schlank und effizienter" TIMER mit regionalem Format, 24h- und gemischter Eingabeunterstützung
Anpassung des Substitutionsmethodenkörpers von Aacinis, kein IF, nur ein FOR (meine regionale Anpassung)

1: Datei timer.bat, die sich irgendwo im %PATH% oder im aktuellen Verzeichnis befindet

@echo off & rem :AveYo: kompakte Timerfunktion mit regionalem Format, 24 Stunden und gemischter Eingabeunterstützung
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof

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 until midnight=!timer_end!
Die Eingabe kann jetzt gemischt werden, für unwahrscheinliche, aber mögliche Änderungen des Zeitformats während der Ausführung

2: Funktion :timer im Batch-Skript gebündelt (Beispielverwendung unten):

@echo off
set "TIMER=call :timer" & rem kurzes Makro
echo.
echo BEISPIEL:
call :timer
timeout /t 3 >nul & rem Jeglicher Prozess hier..
call :timer
echo.
echo KURZES MAKRO:
%TIMER% & timeout /t 1 & %TIMER% 
echo.
echo TESTEINGABE:
set "start=22:04:04.58"
set "end=04.22.44,22"
echo %start% ~ start & echo %end% ~ end
call :timer "%start%"
call :timer "%end%"
echo.
%TIMER% & %TIMER% "00:00:00.00" no 
echo BIS MITTERNACHT: %timer_end%
echo.
pause 
exit /b

:: um es zu testen, beide obige und untere Codeabschnitte kopieren und einfügen

rem :AveYo: kompakte Timerfunktion mit regionalem Format, 24 Stunden und gemischter Eingabeunterstützung 
:timer Nutzung " call :timer [Eingabe - optional] [no - optional]" :i Ergebnis wird beim zweiten Aufruf angezeigt, in timer_end gespeichert 
if not defined timer_set (if not "%~1"=="" (call set "timer_set=%~1") else set "timer_set=%TIME: =0%") & goto :eof
(if not "%~1"=="" (call set "timer_end=%~1") else set "timer_end=%TIME: =0%") & setlocal EnableDelayedExpansion
for /f "tokens=1-6 delims=0123456789" %%i in ("%timer_end%%timer_set%") do (set CE=%%i&set DE=%%k&set CS=%%l&set DS=%%n)
set "TE=!timer_end:%DE%=%%100)*100+1!"     & set "TS=!timer_set:%DS%=%%100)*100+1!"
set/A "T=((((10!TE:%CE%=%%100)*60+1!%%100)-((((10!TS:%CS%=%%100)*60+1!%%100)" & set/A "T=!T:-=8640000-!"
set/A "cc=T%%100+100,T/=100,ss=T%%60+100,T/=60,mm=T%%60+100,hh=T/60+100"
set "value=!hh:~1!%CE%!mm:~1!%CE%!ss:~1!%DE%!cc:~1!" & if "%~2"=="" echo/!value!
endlocal & set "timer_end=%value%" & set "timer_set=" & goto :eof

CE, DE und CS, DS stehen für Doppelpunkt-Ende, Punktende und Doppelpunkt festlegen, Punkt festlegen - verwendet für gemischte Formatunterstützung

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