Frage

Wie kann ich die Zeit (in ms) gedruckt werden in einer Windows-Batch-Datei?

Ich mag die Zeit messen, die zwischen den Linien in meiner Batch-Datei passiert, aber Windows ist „Zeit / T“ Millisekunden nicht gedruckt wird.

War es hilfreich?

Lösung

%time% sollte funktionieren, vorausgesetzt, genügend Zeit zwischen den Anrufen abgelaufen:

@echo OFF

@echo %time%
ping -n 1 -w 1 127.0.0.1 1>nul
@echo %time%

Auf meinem System bekomme ich folgende Ausgabe:

  

6: 46: 13.50
   6: 46: 13,60

Andere Tipps

Wenn Sie tun so etwas wie

for /l %%i in (1,1,500) do @echo %time%

oder

if foo (
    echo %time%
    do_something
    echo %time%
)

dann könnte man einfach ein setlocal enabledelayedexpansion am Anfang Ihrer Batch-Datei setzen und verwendet !time! statt %time%, die bei der Ausführung ausgewertet werden, nicht auf die Linie Parsen (die in Klammern vollständige Blöcke eingeschlossen enthält).

Unter Batch „Programm“ sollte das tun, was Sie wollen. Bitte beachten Sie, dass es die Daten in Hundertstelsekunden statt Millisekunden ausgibt. Die Präzision der verwendeten Befehle sind nur Hundertstelsekunden.

Hier ist ein Beispiel für die Ausgabe:

STARTTIME: 13:42:52,25
ENDTIME: 13:42:56,51
STARTTIME: 4937225 centiseconds
ENDTIME: 4937651 centiseconds
DURATION: 426 in centiseconds
00:00:04,26

Hier ist die Batch-Skript:

@echo off
setlocal

rem The format of %TIME% is HH:MM:SS,CS for example 23:59:59,99
set STARTTIME=%TIME%

rem here begins the command you want to measure
dir /s > nul
rem here ends the command you want to measure

set ENDTIME=%TIME%

rem output as time
echo STARTTIME: %STARTTIME%
echo ENDTIME: %ENDTIME%

rem convert STARTTIME and ENDTIME to centiseconds
set /A STARTTIME=(1%STARTTIME:~0,2%-100)*360000 + (1%STARTTIME:~3,2%-100)*6000 + (1%STARTTIME:~6,2%-100)*100 + (1%STARTTIME:~9,2%-100)
set /A ENDTIME=(1%ENDTIME:~0,2%-100)*360000 + (1%ENDTIME:~3,2%-100)*6000 + (1%ENDTIME:~6,2%-100)*100 + (1%ENDTIME:~9,2%-100)

rem calculating the duratyion is easy
set /A DURATION=%ENDTIME%-%STARTTIME%

rem we might have measured the time inbetween days
if %ENDTIME% LSS %STARTTIME% set set /A DURATION=%STARTTIME%-%ENDTIME%

rem now break the centiseconds down to hors, minutes, seconds and the remaining centiseconds
set /A DURATIONH=%DURATION% / 360000
set /A DURATIONM=(%DURATION% - %DURATIONH%*360000) / 6000
set /A DURATIONS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000) / 100
set /A DURATIONHS=(%DURATION% - %DURATIONH%*360000 - %DURATIONM%*6000 - %DURATIONS%*100)

rem some formatting
if %DURATIONH% LSS 10 set DURATIONH=0%DURATIONH%
if %DURATIONM% LSS 10 set DURATIONM=0%DURATIONM%
if %DURATIONS% LSS 10 set DURATIONS=0%DURATIONS%
if %DURATIONHS% LSS 10 set DURATIONHS=0%DURATIONHS%

rem outputing
echo STARTTIME: %STARTTIME% centiseconds
echo ENDTIME: %ENDTIME% centiseconds
echo DURATION: %DURATION% in centiseconds
echo %DURATIONH%:%DURATIONM%:%DURATIONS%,%DURATIONHS%

endlocal
goto :EOF

Vielleicht dieses Tool könnte helfen? Es ist nicht die Zeit zurück, aber es ist ein gutes Werkzeug, um die Zeit ein Befehl nimmt zu messen.

  

% TIME% im Format H: MM: SS, CS nach Mitternacht und damit Umwandlung in Hundertstelsekunden> funktioniert nicht. Sehen Patrick Cuff der Post mit 6.46 scheint es, dass es nicht nur mir.

Aber mit diesen Zeilen Bevor Sie beheben sollen dieses Problem einfach:

if " "=="%StartZeit:~0,1%" set StartZeit=0%StartZeit:~-10%
if " "=="%EndZeit:~0,1%" set EndZeit=0%EndZeit:~-10%

Vielen Dank für Ihre schöne Inspiration! Ich mag es zu benutzen in meinem mplayer, ffmpeg, SOx Scripts meine Mediadateien für alten PocketPlayers nur zum Spaß kuppeln.

Sie müssen vorsichtig sein mit dem, was Sie tun wollen, weil es nicht nur darum, ist es, die Zeit zu erhalten.

Der Ansatz hat interne Variablen das Datum und die TME darzustellen: % DATE%% TIME% . Aber sie abhängig von dem Windows-Gebietsschema.

% Date% :

  • dd.MM.yyyy
  • tt.MM.uu
  • d.M.yy
  • TT / MM / JJ
  • yyyy-MM-dd

% TIME% :

  • H: mm: ss, ms
  • HH: mm: ss, ms

Nun, wie lange das Skript funktioniert und wann? Zum Beispiel, wenn es länger als einen Tag sein wird, und die Mitternacht geht es wird nicht passieren definitiv falsch, weil Unterschied zwischen zwei Zeitstempeln zwischen Mitternacht ein negativer Wert ist! Sie müssen das Datum richtigen Abstand zwischen den Tagen, um herauszufinden, aber wie Sie das tun, wenn das Datumsformat ist keine Konstante? Dinge mit % DATE% und % TIME% Macht geht worser und worser, wenn Sie sie auch weiterhin für die mathematischen Zwecke verwenden.

Der Grund dafür ist das % DATE% und % TIME% existieren werden, ist nur ein Datum zu zeigen, und eine Zeit Benutzer in der Ausgabe, sie nicht zu verwenden für Berechnungen. Also, wenn Sie richtigen Abstand zwischen einigen Zeitwert oder erzeugen einigen einzigartigen Wert abhängig von Datum und Zeit machen wollen, dann müssen Sie etwas anders und genauer als % DATE% und % TIME% .

Ich bin mit dem wmic Fenster eingebauten Dienstprogramm, solche Dinge zu verlangen (Put es in einer Skriptdatei):

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE`) do if "%%i" == "LocalDateTime" echo.%%j

oder es in der cmd.exe Konsole eingeben:

for /F "usebackq tokens=1,2 delims==" %i in (`wmic os get LocalDateTime /VALUE`) do @if "%i" == "LocalDateTime" echo.%j

Der Nachteil dabei ist, eine geringe Leistung bei häufigen Anrufen. Auf Mine Maschine ist es etwa 12 Anrufe pro Sekunde.

Wenn Sie den Vorgang fortsetzen möchten dies dann kann man so etwas schreiben ( get_datetime.bat ):

@echo off

rem Description:
rem   Independent to Windows locale date/time request.

rem Drop last error level
cd .

rem drop return value
set "RETURN_VALUE="

for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if "%%i" == "LocalDateTime" set "RETURN_VALUE=%%j"

if not "%RETURN_VALUE%" == "" (
  set "RETURN_VALUE=%RETURN_VALUE:~0,18%"
  exit /b 0
)

exit /b 1

Jetzt können Sie analysieren % RETURN_VALUE% somethere in Ihrem Skript:

call get_datetime.bat
set "FILE_SUFFIX=%RETURN_VALUE:.=_%"
set "FILE_SUFFIX=%FILE_SUFFIX:~8,2%_%FILE_SUFFIX:~10,2%_%FILE_SUFFIX:~12,6%"
echo.%FILE_SUFFIX%
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top