Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Chipy

Chipy (Level 1) - Jetzt verbinden

17.02.2007, aktualisiert 20.02.2007, 8548 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 ..
Ähnliche Inhalte
Batch & Shell

Batch: Zeit ermitteln und ausgeben lassen während ein Bat.File durchläuft

gelöst Frage von BatchAnfaenger91Batch & Shell2 Kommentare

Hallo Liebe Leute ;) meine nächste Frage die ich mir erstelle ist: Ist es möglich in CMD die Zeit ...

Batch & Shell

Batch oder PS um Datenvolumen zu ermitteln

gelöst Frage von rudeboyBatch & Shell13 Kommentare

Guten Morgen zusammen, ist es möglich mit Hilfe von Batch oder PS-Skript die über die Netzwerkschnittstelle übertragene Datenmenge zB ...

Batch & Shell

Batch: Umgebungsvariable zusammenstellen und ausgeben

Frage von yousaintBatch & Shell1 Kommentar

Hallo Zusammen ich habe eine Frage bzgl. Umgebungsvariablen in einer Batch-Datei. Folgender Fall liegt vor: Batch-Datei: echo off setlocal ...

Batch & Shell

Batch - Nur Laufwerksbuchstabe ausgeben

gelöst Frage von padrichBatch & Shell2 Kommentare

Hallo zusammen! Ich habe vor eine Batch zu schreiben, welche mit den Laufwerkbuchstaben vom Laufwerk "Acer" löscht. Bis jetzt ...

Neue Wissensbeiträge
Suche Projektpartner

PC Recycling Projekte mit Flüchtlingen und Kids suchen Materialspenden und Mitmacher!

Erfahrungsbericht von NettePCyclePiraten vor 17 StundenSuche Projektpartner5 Kommentare

Hallöchen liebe Kollegen, ich betreue zwei PC-Gruppen im Raum Dortmund: "Ne#e PCycle Pir@ten" & "PCschr@uber Br@mbauer" Wir sind eine ...

iOS
IOS 12.2 beta und OpenVPN iPad und iPhone
Erfahrungsbericht von magicteddy vor 1 TagiOS

Moin, kleiner Hinweis an die experimentierfreudigen unter Euch: Bei der aktuellen beta gibt es ein Problem im Zusammenspiel zwischen ...

Vmware
VMware Tools 10.3 verfügbar
Information von sabines vor 1 TagVmware

Eine Sicherheitslücke wird mit den Tools der Version 10.3 geschlossen, die Tools müssen auf jeder VM aktualisiert werden. Näheres ...

Apple

Apple aktualisiert MacBook Pro, mit bis zu sechs Kernen

Information von Vision2015 vor 3 TagenApple

Jawohlchen das Warten hat sich gelohnt :-) Apple aktualisiert MacBook Pro Frank

Heiß diskutierte Inhalte
Microsoft
Dringend: Nach neustart kein zugriff mehr per RDP möglich - vermutlich wegen gelöschter SID in AD
gelöst Frage von sven784230Microsoft30 Kommentare

Hallo zusammen, gerade hat ein Server 2012 (terminalserver + Active directory) einen geplanten Neustart durchgeführt, wenn ich mich jetzt ...

Exchange Server
Exchange 2013 - Update schlägt fehlt
gelöst Frage von chb1982Exchange Server20 Kommentare

Hallo zusammen, kann sich jemand einen Reim auf die unten stehenden Fehlermeldung machen? Sie tritt auf beim Update von ...

Windows Netzwerk
Netzwerk einrichten - wie mache ich es richtig?
Frage von gintonikWindows Netzwerk17 Kommentare

Hallo, ich bin neu hier und erhoffe mir hier ein paar Antworten für meine Umsetzung zu erhalten. Kurz zu ...

Microsoft Office
Druckdatum nur auf ausgedrucktem Dokument anzeigen
gelöst Frage von eichi18Microsoft Office16 Kommentare

Hallo zusammen Ich versuche in einem Word Dokument das Druckdatum nur auf dem eigentlichen Ausdruck auszugeben und am Bildschirm ...