Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zeitdifferenz ermitteln und ausgeben per Batch

Frage Entwicklung Batch & Shell

Mitglied: Chipy

Chipy (Level 1) - Jetzt verbinden

17.02.2007, aktualisiert 20.02.2007, 8140 Aufrufe, 9 Kommentare

Hi zusammen,

beschäftige mich seit kurzem intensiver mit Batch.

Nun stehe ich vor eine naja nicht gerade problem, aber mich Quält eine frage und zwar
geht dieser Snippsel auch einfacher auszuwerten ?

Ich habe ein Backupscript geschrieben läuft auch einwandfrei.
Nun erstelle ich mir dementsprechend auch ein Logfile. Aber wenn die Datensicherung durch ist möchte ich im Logfile
die Gesamtzeit stehen haben die das Backup gebraucht hat.

Habe mir dazu folgendes nun zusammengestrickt :

01.
@Echo Off & SetLocal 
02.
 
03.
:: Vitruellen Wert Setzen 
04.
Set Virt=1000000 
05.
 
06.
:: Aktuelle Zeit in eine Datei speichern 
07.
Echo %time% >zeit.tmp 
08.
 
09.
:: Gespeicherte Datei mit Zeit formatieren 
10.
FOR /F "tokens=1,2,3 delims=:," %%a in (zeit.tmp) do set timeA=%%a%%b%%c 
11.
 
12.
:: Zum testen 5 sekunden warten / Hier würde mein Backup (rar) nun starten 
13.
wait 5 
14.
 
15.
:: Wieder aktuelle Zeit in eine Datei speichern 
16.
Echo %time% >zeit.tmp 
17.
:: Und hier wieder die Zeit formatieren 
18.
FOR /F "tokens=1,2,3 delims=:," %%a in (zeit.tmp) do set timeB=%%a%%b%%c 
19.
 
20.
:: die 2 gespeicherten Zeiten ausrechnen und die differenz speichern 
21.
:: Virtuellen Wert mit differnz zusammenrechnen 
22.
set /a VirtA=%timeB%-%timeA% && set /a VirtB=%Virt%+%VirtA% 
23.
 
24.
:: Das Entergebniss in einem leserlichen Format mit : speichern. 
25.
set ErG=%VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2% 
26.
 
27.
:: Ergebniss ausgeben 
28.
Echo Dauer %ErG%
[Edit Biber] Nach Rücksprache per PN mit Chipy Beitrag auf gelöst und geschlossen gesetzt am 21.02.2007 [/Edit]
Mitglied: Dani
17.02.2007 um 22:03 Uhr
G' Abend,
also ich habe mal ein bisschen "gekürtzt".
Das ist übrig geblieben:
01.
@echo Off & SetLocal 
02.
 
03.
:: Vitruellen Wert Setzen 
04.
set Virt=1000000 
05.
 
06.
for /f "delims=:, tokens=1,2,3" %%a in ('echo %time%') do set timeA=%%a%%b%%c 
07.
ping 127.0.0.1 -n 5 >nul 
08.
for /f "tokens=1,2,3 delims=:," %%a in ('echo %time%') do set timeB=%%a%%b%%c 
09.
 
10.
set /a VirtB=%Virt%+(%timeB%-%timeA%) 
11.
echo Dauer: %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%
Jedoch der Set Befehl erzeugt einen Fehler (Fehlende Klammer). Warum?? Weiß ich gerade auch nicht. Ansonsten würde es so gehen!! Hoffe, dass ich dich ein Stück weitergebracht habe.


Grüße
Dani
Bitte warten ..
Mitglied: bastla
18.02.2007 um 05:48 Uhr
@Dani

Warum??

Das "echo %time%" sollte ein Komma vor den Hundertstelsekunden (die hier übrigens total vernachlässigt werden - da muss man die Genauigkeit dieser Messung dann aber schon anzweifeln ) liefern, ersetzt es aber durch eine Leerstelle - also:
01.
for /f "tokens=1,2,3 delims=:, " ...
Wenn das Komma schon nichts nützt, sollte es zumindest auch nicht schaden - daher zur Sicherheit dabei lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: Chipy
18.02.2007 um 11:07 Uhr
Moin Bastla,

naja die Hundertstel benötige ich nicht unbedingt *gg
Weil so genau muss ich es nicht wissen ob er 1-2-3 hunderstel schneller oder langsamer war.
Daher dann auch das entfernen ;)


@Dani

Ich schau mir dein Snippsel mal an ;)

THX


@Dani

> Warum??

Das "echo %time%" sollte ein Komma
vor den Hundertstelsekunden (die hier
übrigens total vernachlässigt
werden - da muss man die Genauigkeit dieser
Messung dann aber schon anzweifeln )
liefern, ersetzt es aber durch eine
Leerstelle - also:
01.
for /f "tokens=1,2,3 
02.
> delims=:, " ... 
03.
> 
Wenn das Komma schon nichts
nützt, sollte es zumindest auch nicht
schaden - daher zur Sicherheit dabei lassen
...

Grüße
bastla
Bitte warten ..
Mitglied: Chipy
18.02.2007 um 11:50 Uhr
Hi,

@ Dani

habe auch noch was gefunden *gg
die tokens kann man noch zusammenfassen.
Sieht nun kürzer aus aber ............ ;)

Sollte so entgültig sein :

@echo Off & SetLocal

for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeA=%%a%%b%%c

wait 5

for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeB=%%a%%b%%c

set Virt=1000000
set /a VirtB=%Virt%+(%timeB%-%timeA%)

echo Dauer: %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%





@bastla

wie du schon erwähntest, das Komma kann man knicken hat keinen einfluss darauf mehr
war nur von nöten wo die Zeit noch in einem textfile gespeichert war.
Seit dani´s lösung den Zeitwert direkt als Set zu setzen ist das komma egal und das leerzeichen ist von nöten.
Ich frage mich allerdings warum er den Zeitwert mit einem leerzeichen anlegt, mhhhhhh






G' Abend,
also ich habe mal ein bisschen
"gekürtzt".
Das ist übrig geblieben:
01.
@echo Off & SetLocal 
02.
>  
03.
> :: Vitruellen Wert Setzen 
04.
> set Virt=1000000 
05.
>  
06.
> for /f "delims=:, tokens=1,2,3" 
07.
> %%a in ('echo %time%') do set 
08.
> timeA=%%a%%b%%c 
09.
> ping 127.0.0.1 -n 5 >nul 
10.
> for /f "tokens=1,2,3 delims=:," 
11.
> %%a in ('echo %time%') do set 
12.
> timeB=%%a%%b%%c 
13.
>  
14.
> set /a VirtB=%Virt%+(%timeB%-%timeA%) 
15.
> echo Dauer: 
16.
> %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2% 
17.
> 
Jedoch der Set Befehl erzeugt einen Fehler
(Fehlende Klammer). Warum?? Weiß ich
gerade auch nicht. Ansonsten würde es so
gehen!! Hoffe, dass ich dich ein Stück
weitergebracht habe.


Grüße
Dani



EDIT:
konnte Virt Zeile doch nicht mit && zusammensetzen
Bitte warten ..
Mitglied: bastla
18.02.2007 um 14:32 Uhr
@Chipy

Wenn Du denn gesteigerten Wert auf Kürzerfassungen (noch nicht "Kürzest" - Biber war noch nicht da) legst (geht's Dir also doch um Sekundenbruchteile bei der Laufzeit ):
01.
@echo Off & SetLocal 
02.
for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeA=%%a%%b%%c 
03.
sleep 5 
04.
for /f "tokens=1-3 delims=: " %%a in ('echo %time%') do set timeB=%%a%%b%%c 
05.
set /a VirtB=1000000+%timeB%-%timeA% 
06.
echo Dauer: %VirtB:~1,2%:%VirtB:~3,2%:%VirtB:~-2%
Die Variablennamen verkürze ich aber nimmer ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
18.02.2007 um 14:56 Uhr
Moin Chipy,

ich würde einen anderen Ansatz wählen.

Meine Skizze:
01.
@echo off & setlocal 
02.
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a start=%%i*3600+60*%%j+%%k 
03.
REM Variable %Start% hat jetzt einen in Sekunden umgerechneten %time%-Wert. 
04.
 
05.
Pause 
06.
REM Wo jetzt pause steht, ist natürlich der MachMirDenBackup-Teil 
07.
 
08.
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a stop=%%i*3600+60*%%j+%%k 
09.
REM Auch Variable %Stop% hat jetzt einen in Sekunden umgerechneten %time%-Wert. 
10.
Set /a DauerInMin=(stop-start) %% 60 
11.
Set /a UndRestInSecs= (stop-start) - DauerInMin*60  
12.
Echo Gedauert hat es %dauerInMin%:%UndRestInSecs% 
13.
REM Oder formatiert: 
14.
Set /a FmtSecs=UndRestInSecs+100 
15.
Set /a FmtMins=DauerInMin+100 
16.
Echo Gedauert hat es %FmMins:~-2%:%FmtSecs:~-2%
[...ungetestete Skizze]

Gruss
Biber
Bitte warten ..
Mitglied: Chipy
18.02.2007 um 20:32 Uhr
Moin Biber,

Schöner Source aber die ausrechnung hat kein Hand und kein Fuss ;)
Ich weiss , schreibtest ja nicht getestet.
Es kommt nur Quak raus, habe mal extra was in Stunden errechnen lassen und dann wiederum in Sekunden.
Das Ergebniss ist erschreckend ;)

Erläutere mir doch mal bitte 3 Sachen :

start=%%i*3600+60*%%j+%%k

und

DauerInMin=(stop-start) %% 60 <- Wozu %%60 ?

und zu guter letzt :

FmtSecs=UndRestInSecs+100


Irgendwie komme ich wenn ich das auch manuell nachrechne zu unlogischen ergebnissen ;)
Sorry für meine Unverfrohrenheit .

@bastla habe noch was gefunden *gg

dank Biber fiel mir das auf : ("%time%") kann man sich das Echo sparen

Gruss Chipy


Moin Chipy,

ich würde einen anderen Ansatz
wählen.

Meine Skizze:
01.
@echo off & setlocal 
02.
> for /f "tokens=1-3 delims=:," %%i 
03.
> in ("%time%") do set /a 
04.
> start=%%i*3600+60*%%j+%%k 
05.
> REM Variable %Start% hat jetzt einen in 
06.
> Sekunden umgerechneten %time%-Wert. 
07.
>  
08.
> Pause 
09.
> REM Wo jetzt pause steht, ist natürlich 
10.
> der MachMirDenBackup-Teil 
11.
>  
12.
> for /f "tokens=1-3 delims=:," %%i 
13.
> in ("%time%") do set /a 
14.
> stop=%%i*3600+60*%%j+%%k 
15.
> REM Auch Variable %Stop% hat jetzt einen in 
16.
> Sekunden umgerechneten %time%-Wert. 
17.
> Set /a DauerInMin=(stop-start) %% 60 
18.
> Set /a UndRestInSecs= (stop-start) - 
19.
> DauerInMin*60  
20.
> Echo Gedauert hat es 
21.
> %dauerInMin%:%UndRestInSecs% 
22.
> REM Oder formatiert: 
23.
> Set /a FmtSecs=UndRestInSecs+100 
24.
> Set /a FmtMins=DauerInMin+100 
25.
> Echo Gedauert hat es 
26.
> %FmMins:~-2%:%FmtSecs:~-2% 
27.
> 
[...ungetestete Skizze]

Gruss
Biber
Bitte warten ..
Mitglied: Biber
18.02.2007 um 22:01 Uhr
Moin Chipy,

start=%%i*3600+60*%%j+%%k
Na ja, das stimmte noch um 21:52:34,24..
set /a start=21*3600+60*52+34
78754

...aber das war in der Tat Bullshit:

DauerInMin=(stop-start) %% 60 <- Wozu %%60 ?
Natürlich nicht Modulo 60 sondern geteilt durch 60.
DauerInMin=(stop-start)/ 60

Der Rest mit den Fmtxxx-Variablen ist nur Spielerei zur Formatierung im hh:mm-Format.

Gruss
Biber
Bitte warten ..
Mitglied: Biber
20.02.2007 um 09:18 Uhr
Moin Chipy,

nach Deinen mahnenden Worten hier noch mal die oberflächlich getestete Version meiner damaligen Skizze.

01.
::---ShowTime.bat Biber 2007 Sinnfreier Batch zur Demo Zeitdaueranzeige im Batch 
02.
@echo off & setlocal 
03.
 
04.
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100 
05.
REM Variable %Start% hat jetzt einen in Sekunden umgerechneten %time%-Wert. 
06.
Pause 
07.
REM Wo jetzt pause steht, ist natürlich der MachMirDenBackup-Teil 
08.
for /f "tokens=1-3 delims=:," %%i in ("%time%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100 
09.
REM Auch Variable %Stop% hat jetzt einen in Sekunden umgerechneten %time%-Wert. 
10.
Set /a DauerInMin=(stop-start) / 60 
11.
Set /a UndRestInSecs= (stop-start) - DauerInMin*60  
12.
@Echo [Unformatiert] Gedauert hat es %dauerInMin%:%UndRestInSecs% 
13.
REM Oder formatiert: 
14.
Set /a FmtSecs=UndRestInSecs+100 
15.
Set /a FmtMins=DauerInMin+100 
16.
@Echo [Formatiert] Gedauert hat es %FmtMins:~-2%:%FmtSecs:~-2%
Demo:
01.
>f:\temp\ShowTime.bat 
02.
Drücken Sie eine beliebige Taste . . 
03.
[Unformatiert] Gedauert hat es 1:2 
04.
[Formatiert] Gedauert hat es 01:02
Gruss
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch oder PS um Datenvolumen zu ermitteln (13)

Frage von rudeboy zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...