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

Bestimmter Abschnitt einer Zeile auslesen

Frage Entwicklung Batch & Shell

Mitglied: ki-einheit

ki-einheit (Level 1) - Jetzt verbinden

25.06.2010 um 14:09 Uhr, 3581 Aufrufe, 27 Kommentare

Hi. Ich habe mich schon etwas mit Batch beschäftigt. Dank diesem Forums konnte ich eine Menge lernen

Nun zu meinem Problem.
Ich habe mir eine "Logbat" geschrieben. Diese wird per Autostart aktiviert und schreibt folgendes in eine Logdatei:

01.
echo Zugegriffen von %username% am %date% um %time% Uhr >> C:\log\logfile_%username%.ini
Ebenso hab ich eine "beendenbat" geschrieben:
01.
echo         Windows beendet am %date% um %time% Uhr >> C:\log\logfile_%username%.ini
die Logdatei sieht in etwa so aus:

Zugegriffen von User am 25.06.2010 um 2:14:39,86 Uhr
Windows beendet am 25.06.2010 um 4:31:46,81 Uhr

Ich wollte das so machen, dass am Ende berechnet wird, wie lange der PC an war.
Dies sollte dann So zum schluss aussehen:

Windows beendet am 25.06.2010 um 4:31:46,81 Uhr || 02:17:07 h

bisher ist Dies mein Quellcode:

01.
@echo off 
02.
 
03.
rem Zählervariable setzten 
04.
Set /A "Counter=0"  
05.
FOR /F "delims=" %%A IN (c:\log\logfile_%username%.ini) DO SET /A "Counter+=1" 
06.
rem Zählervariable um 1 verringern 
07.
set /a "Counter1=%Counter%-1" 
08.
rem gib die letzte Zeile in der Textdatei aus 
09.
FOR /F "tokens=1 delims=," %%i IN (c:\log\logfile_%username%.ini) DO set var1=%%i 
10.
echo %var1% 
11.
rem gib eine bestimmte Zeile (n=Counter1(Vorletzte Zeile der Textdatei)) aus 
12.
Set /a cnt=1  
13.
Set /a n=%Counter1%  
14.
for /F "tokens=1 delims=," %%i in (c:\log\logfile_%username%.ini) do call :setvarFixLine %n% "%%i"   
15.
Echo %Var% 
16.
 
17.
pause 
18.
rem zum Berechnen der vorletzten Zeile 
19.
:setvarFixLine  
20.
If %cnt%==%1 Set Var=%~2  
21.
Set /a cnt+=1   
22.
goto :eof  
23.
 
24.
exit
Das Problem ist, dass ich NICHT die Uhrzeit aus dem ganzen String rausfiltern kann.
Gibt es denn eine Möglichkeit, wie ich von dem String
Zugegriffen von Deadman am 25.06.2010 um 2:14:39,86 Uhr
nur die Zeit bekommen kann?

Hoffe es kann mir da jemand weiterhelfen.

Ki-Einheit
27 Antworten
Mitglied: MisterExpulso
25.06.2010 um 14:44 Uhr
Zitat von ki-einheit:
Das Problem ist, dass ich NICHT die Uhrzeit aus dem ganzen String rausfiltern kann.
Gibt es denn eine Möglichkeit, wie ich von dem String
> Zugegriffen von Deadman am 25.06.2010 um 2:14:39,86 Uhr
nur die Zeit bekommen kann?

Hoffe es kann mir da jemand weiterhelfen.

Ki-Einheit

Hallo Ki-Einheit,
das kannst du mit dieser FOR-Schleife erledigen, vorausgesetzt, die Uhrzeit steht immer an 7. Stelle:
01.
for /f "tokens=7 delims= " %i in (x.txt) do @echo %i
Bitte warten ..
Mitglied: ki-einheit
25.06.2010 um 14:59 Uhr
Danke für die schnelle Hilfe.

Da gibt es aber noch ein kleines Problem.
Es soll aus den Variablen "var" und "var1" die entsprechenden Daten heruasgesucht werden. wenn ich den Code ändere

01.
for /f "tokens=7 delims= " %%i in (%var1%) do @echo %%i
Sagt er mir immerzu
Die Datei "Zugegriffen" kann nicht gefunden werden.

Dabei steht doch die komplette Zeile in der Variable.
Bitte warten ..
Mitglied: Biber
25.06.2010 um 15:14 Uhr
Moin ki-einheit,

willkommen im Forum.

Versuch es so (Demo am CMD-Prompt):
>set "var1=Zugegriffen von Deadman am 25.06.2010 um 2:14:39,86 Uhr" 
 
>for /f "tokens=7 delims= " %i in ("%var1%") do @echo %i 
2:14:39,86 
 
(=15:03:09  D:\Temp=) 
>for /f "tokens=7 delims=, " %i in ("%var1%") do @echo %i 
2:14:39
Du musst %var1% nochmals in Anführungszeichen setzen, das ist alles.
Die letzte Zeile zeigt, wie du gleich die mit Komma getrennten 100stel Sunkunden wegschneiden kannst...die transportieren keine relevante Information.

Grüße
Biber
Bitte warten ..
Mitglied: MisterExpulso
25.06.2010 um 15:18 Uhr
Kurze Verständnisfrage:
  • Was steht in den beiden Variable
  • Was möchtest du mit dieser FOR-Schleife erreichen
Bitte warten ..
Mitglied: ki-einheit
25.06.2010 um 15:43 Uhr
@DGzRsBorkum also zu deinen Fragen.

1. in der Variable "var1" steht folgendes:
Zugegriffen von User am 25.06.2010 um 2:14:39,86 Uhr

in der Variable "var" steht folgendes:
Windows beendet am 25.06.2010 um 4:31:46,81 Uhr

2. in beiden Variablen stehen jetzt die aktuell letzten Werte drin. Die FOR-Schleife soll die Zeilen
Zugegriffen von User am 25.06.2010 um
Windows beendet am 25.06.2010 um
entfernen, sodass ich nur noch die Uhrzeit habe, mit der ich dann berechnen kann, wie lange der PC angeschaltet war.

@Bieber Vielen Dank für deine Hilfe. Bei der ersten Variable (var1) hat es perfekt funktioniert. Leider geht es bei der 2. Variable (var) nicht.
Bitte warten ..
Mitglied: MisterExpulso
25.06.2010 um 15:54 Uhr
Ah OK jetzt habe ich es verstanden.
aber doch noch eine Frage was heißt
Leider geht es bei der 2. Variable (var) nicht.
wird bei dir dann zufällig Uhr ausgegeben? Wenn das der Fehler ist, dann musst du den Token ändern.
Tipp: Zähle an welcher Position sich die Uhrzeit befindet - nicht an 7.
Bitte warten ..
Mitglied: bastla
25.06.2010 um 15:55 Uhr
Hallo ki-einheit und willkommen im Forum!
Bei der ersten Variable (var1) hat es perfekt funktioniert. Leider geht es bei der 2. Variable (var) nicht.
Könnte das daran liegen, dass die Zeit in der 2. Variable als 6. "Wort" (="token") steht?

Grüße
bastla
Bitte warten ..
Mitglied: ki-einheit
25.06.2010 um 16:00 Uhr
Tatsache. Da war der Fehler
Thank you Bastla

Funktioniert soweit perfekt. Hab dazu aber noch eine kleine Frage.
Ist es möglich, mit dem Uhrzeitformat zu rechnen?
wenn ich z.B.
04:31:46
11:20:26
zusammenrechne, dann kommt 06:48:40 dabei heraus. In dem Programm kommt aber eine 11 als ergebnis.
Hier mal der Codeschnippsel

01.
set /a berechnen=%zeit2%-%zeit1% 
02.
echo %berechnen% 
03.
pause
Bitte warten ..
Mitglied: ki-einheit
25.06.2010 um 16:44 Uhr
Ich habs schon hinbekommen. Es funktioniert jetzt alles zur Zufriedenheit

Habt nochmals alle Vielen Dank für die Hilfen.
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 11:37 Uhr
Tach leute, ich bins nochmal

also So wie ich es bisher gemacht habe, lief alles super. Jetzt ist mir aber aufgefallen, dass wenn der PC länger als bis 24 Uhr läuft, dass dann ein ganz anderer Wert heraus kommt.

Zugegriffen von User am 28.06.2010 um 9:44:12,26 Uhr
Windows beendet am 29.06.2010 um 0:07:49,98 Uhr

Normalerweise sollte dann ja die Zeit "14:23:37" dabei herauskommen. Leider kommt aber folgende Zeit raus "09:36:23".

Ich hab den Code schon etwas geändert. Dabei kommt aber ständig

Fehlender Operator

(dort wo Fehlender Operator als REM steht)

01.
 
02.
if %datum1%==%datum2% goto gleich 
03.
if not %datum1%==%datum2% goto neu 
04.
 
05.
REM fehlender operatior 
06.
set /a "mitternacht=24:00:00" 
07.
for /f "tokens=1-3 delims=:," %%i in ("%mitternacht%") do set /a neuzeit=%%i*3600+60*(1%%j %% 100)+1%%k-100 
08.
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100 
09.
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100 
10.
 
11.
Set /a DauerinStd=(neuzeit-start+stop) / 3600  
12.
Set /a DauerInMin=(neuzeit-start+stop-(DauerinStd*3600) ) / 60  
13.
set /a UndRestInSecs= (neuzeit-start+stop) -(DauerinStd*3600)- DauerInMin*60 
14.
goto formatieren 
15.
 
16.
:formatieren 
17.
rem Formatiert die Variablen in richtiges Vormat 
18.
Set /a FmtSecs=UndRestInSecs+100  
19.
Set /a FmtMins=DauerInMin+100  
20.
Set /a FmtStd=DauerInStd+100 
21.
 
22.
rem ergebnis wird in die Datei gespeichert 
23.
echo %var1% : Dauer %FmtStd:~-2%:%FmtMins:~-2%:%FmtSecs:~-2% 
24.
pause
Hat jemand eine Idee, woran die Fehlrechnung liegen könnte und wo bitteschön ein Operator fehlt ???
Bitte warten ..
Mitglied: bastla
29.06.2010 um 11:45 Uhr
Hallo ki-einheit!

Lass das "/a" beim "set" weg ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
29.06.2010 um 12:11 Uhr
Genauer gesagt, bastla,

Zitat von bastla:
Lass das "/a" beim "set" weg ...

Lass das "/a" beim ersten "set" weg ... bei den Mitternachtsspitzen.

Grüße
Biber
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 12:16 Uhr
Zugegriffen von User am 28.06.2010 um 9:44:12,26 Uhr
Windows beendet am 29.062010 um 0:07:49,98 Uhr
Dauer 33:36:23

Das kann doch nicht stimmen oder ? nach meiner Berechnung (Excel) sollte das herauskommen

Dauer 14:23:37
Bitte warten ..
Mitglied: Biber
29.06.2010 um 12:39 Uhr
Moin ki-einheit,

nochmal langsam.... du musst ja erst mal abstrakt für dich einen Rhythmus bzw. Algorithmus herleiten.

Tritt doch mal zwei Schritt zurück:
Zugegriffen von User am 28.06.2010 um 9:44:12,26 Uhr
Windows beendet am 29.06.2010 um 0:07:49,98 Uhr

Wenn es am 28.06 begonnen hätte um 0 Uhr 0 Minuten und geendet hätte am 29.06 auch um 0 Uhr 0 Minuten
--> dann wäre die Rechnung ja einfachst:
>set /a ((29-28)*24*60)
1440
--> 1 voller Tag mal 24 Stunden zu je 60 Minuten = 1440 Minuten.
Nun hat es aber nicht um 0 Uhr 0 Minuten begonnen, sondern erst 9 Stunden 44 Minuten später.
Die musst du abziehen.
>set /a ((29-28)*24*60) -(9*60) -44
856
Und endete nicht um 0 Uhr 0 Minuten, sondern 7 Minuten später.
Die musst du draufschlagen
>set /a ((29-28)*24*60) -(9*60) -44 +7
863
Und voila:

>set /a 863/60
14
--> ergibt 14 Stunden
>set /a 863%60
23
---> und 23 Minuten

Du kannst nur einen Algorithmus abbilden, den du auch nachvollziehen kannst, von daher werde ich nicht oben in den Schnipselzeilen nachbessern.
Finde deinen Algorithmus.

Grüße
Biber
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 13:03 Uhr
Danke Biber. Ich werd mal versuchen, etwas hinzuzimmern. Werd das ergebnis dann später mal Posten, ok?

KI-Einheit
Bitte warten ..
Mitglied: Biber
29.06.2010 um 13:48 Uhr
Moin ki-einheit,

Zitat von ki-einheit:
Danke Biber. Ich werd mal versuchen, etwas hinzuzimmern. Werd das ergebnis dann später mal Posten, ok?
Jepp, das würde mich freuen.
Und freut mich auch, das du meinen Kommentar nicht als unwilliges Abbügeln aufgefasst hast - ich hatte es auch wirklich konstruktiv gemeint.

Und der Vollständigkeit halber: wenn du nicht mehr weiterkommst, sind wir hier.

Grüße
Biber
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 14:05 Uhr
Zitat von Biber:
Und freut mich auch, das du meinen Kommentar nicht als unwilliges Abbügeln aufgefasst hast - ich hatte es auch wirklich
konstruktiv gemeint.

Dachte ich mir schon. Hat mein Lehrer früher auch immer gesagt. Selber Denken macht Schlau

Der code gibt mir leider am Ende die Minuten nicht aus, sonder einfach eine 0.
01.
rem Zerlege die Zeit in Stunde Minute und Sekunde 
02.
for /f "tokens=1-1 delims=:," %%i in ("%zeit1%") do set /a stundea=%%i 
03.
for /f "tokens=2-2 delims=:," %%i in ("%zeit1%") do set /a minutea=%%i 
04.
for /f "tokens=3-3 delims=:," %%i in ("%zeit1%") do set /a sekundea=%%i 
05.
 
06.
rem Das selbe auch mit der zweiten Zeit 
07.
for /f "tokens=1-1 delims=:," %%i in ("%zeit2%") do set /a stundeb=%%i 
08.
for /f "tokens=2-2 delims=:," %%i in ("%zeit2%") do set /a minuteb=%%i 
09.
for /f "tokens=3-3 delims=:," %%i in ("%zeit2%") do set /a sekundeb=%%i 
10.
 
11.
rem Abfrage der Zeitangaben und berechnen 
12.
if not %stundeb%=="0" if not %minuteb%=="0" set /a codea=(24*60)-(stundea*60)+(stundeb*60)-minutea+minuteb 
13.
if %stundeb%=="0" if not %minuteb%=="0" set /a codea=(24*60) -(stundea*60)- minutea + minuteb 
14.
if not %stundeb%=="0" if %minuteb%=="0" set /a codea=(24*60)-(stundea*60)+(stundeb*60)-minutea 
15.
 
16.
rem richtiges Zeitformat bestimmen 
17.
set /a codeb=codea/60 
18.
set /a codec=codea/(60*60)*100 
19.
 
20.
echo %codea%= %codeb% + %codec% 
21.
pause 
22.
exit
Bitte warten ..
Mitglied: bastla
29.06.2010 um 16:16 Uhr
Hallo ki-einheit!

Abgesehen davon, dass die Zerlegung so
01.
rem Zerlege die Zeit in Stunde Minute und Sekunde 
02.
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do ( 
03.
    set /a stundea=%%i 
04.
    set /a minutea=1%%j %% 100 
05.
    set /a sekundea=1%%k %% 100 
06.
)
etwas sicherer erfolgt (hast Du Deinen Code schon mit "09" Minuten oder "08" Sekunden getestet?), würde ich das noch ein wenig anders angehen: Wenn zunächst jede der beiden Zeitangaben auf Minuten umgerechnet ist, kannst Du vorweg vergleichen, ob eine Subtraktion dieser Werte mit positivem Ergebnis möglich ist, oder ob noch der Gegenwert von "24:00:00" addiert werden muss ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
29.06.2010 um 17:17 Uhr
Moin ki-einheit,

dann will ich auch noch zwei (hoffentlich zielführende) Hinweise/Anregungen geben.

1) Die liebevoll überlegten "IF dies IF not das"-Abfragen in Zeile 12-14 mögen ja tun was sie wollen.
Aber in allen drei Fällen kannst du auch ohne Prüfung diese Zuweisung nehmen
set /a codea=(24*60)-(stundea*60)+(stundeb*60)-minutea+minuteb

2) bastla hat schon angeregt, auf jeden Fall alles in Minuten umzurechnen und dann zu prüfen, ob Gegenwert von 24 Stunden addiert werden muss usw.
Teil A ja - auf jeden Fall in Minute umrechnen.
Teil B nein.... nix prüfen
Immer 1440 Minuten addieren und den Wert von %codea% als Modulo 1440 nachbearbeiten.

Beispiel
Bei dem Vergleich "{gestern} 9:44h" bis "{heute morgen} 0:07h" kommen wie mehrfach nachgerechnet 863 Minuten raus ... wenn ein Tag = 1440 als Fixwert in der Gleichung ist.

Bei einem Vergleich " 9:44h" bis "10:07h" kommen - wenn ebenfalls 1440 fix dazugeklatscht werden mit derselben Gleichung heraus:
>f:\schnipsel\kidelta.cmd
Zeit1 [ 9:44:12,26] stundea [9] minutea [44] sekundea [12]
Zeit2 [ 10:07:49,98] stundeb [10] minuteb [7] sekundeb [49]
Stundeb [10] codea [1463]
... und bei %codea% modulo 1440 wären wir wieder bei 23 Minuten (was dann gilt, wenn %dateAlt% == %dateNeu% ist)

Grüße
Biber

[Edit 18:55h Danke@bastla fürs Übernehmen! /Edit]
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 18:18 Uhr
Zitat von Biber:
Teil A ja - auf jeden Fall in Minute umrechnen.

Nun das ist mir soweit klar. Es gibt da aber ein paar kleinere übel.

  1. Am ende soll ja nicht nur eine Uhrzeit von Stunde und Minute rauskommen. Die Sekunden wurden bisher komplett ausgeschlagen.

Hier mal der Codeschnippsel, wie er momentan aussieht.

01.
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do (  
02.
    set /a stundeb=%%i  
03.
    set /a minuteb=1%%j %% 100  
04.
    set /a sekundeb=1%%k %% 100  
05.
06.
 
07.
rem Abfrage der Zeitangaben und berechnen 
08.
if not %stundeb%==0 if not %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea%+%minuteb%-%sekundea%+%sekundeb% 
09.
 
10.
if not %stundeb%==0 if not %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea% 
11.
 
12.
if not %stundeb%==0 if %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea%-%sekundea%+%sekundeb% 
13.
 
14.
if not %stundeb%==0 if %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea% 
15.
 
16.
if %stundeb%==0 if not %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60) -(%stundea%*60)-%minutea% + %minuteb%+%sekundea%-%sekundeb% 
17.
 
18.
if %stundeb%==0 if not %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60) -(%stundea%*60)-%minutea% + %minuteb% 
19.
 
20.
if %stundeb%==0 if %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60*60) -(%stundea%*60)- %sekundea% + %sekundeb% 
21.
 
22.
 
23.
rem richtiges Zeitformat bestimmen 
24.
set /a codeb=%codea%/60 
25.
set /a codec=%codea%*100 /(60*60) 
26.
set /a coded=%codea%*1000 /(60*60*60) 
27.
echo %codea%= %codeb% + %codec% + %coded% 
28.
pause 
29.
exit
wobei ich anmerken muss, dass es überhaupt nicht so funktioniert, wie ich es mir anfangs vorgestellt habe

Ich weiß, meine Gedankengänge sind wirklich konfus, da blicke ich selber schon nicht mehr durch ;-P
Bitte warten ..
Mitglied: bastla
29.06.2010 um 18:33 Uhr
Hallo ki-einheit!

Bibers (Modulo-)Vorschläge ließen sich etwa so umsetzen:
01.
rem Zerlege die Zeit in Stunde Minute und Sekunde und wandle in Sekunden um 
02.
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a Von=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100) 
03.
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a Bis=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100) 
04.
 
05.
set /a Differenz=(86400+Bis-Von) %% 86400 
06.
 
07.
set /a Stunden=Differenz/3600 
08.
set /a Minuten=100+(Differenz %% 3600)/60 
09.
set /a Sekunden=100+(Differenz %% 60) 
10.
 
11.
echo %Differenz% Sekunden = %Stunden%:%Minuten:~-2%:%Sekunden:~-2%
Grüße
bastla
Bitte warten ..
Mitglied: ki-einheit
29.06.2010 um 18:57 Uhr
Hi Bastler

Zitat von bastla:
Bibers (Modulo-)Vorschläge ließen sich etwa so umsetzen...

BINGO

Das mit der Zeit funktioniert jetzt richtig. Vielen Dank an Euch allen für die Hilfe.

Und hier wie versprochen der Fertige und Komplette Code:

01.
@echo off 
02.
rem set "ort=c:\log\logfile_%username%.ini" 
03.
set "ort=c:\log\logfile_%username%.ini" 
04.
set "ort2=c:\log\temp.txt" 
05.
 
06.
rem Zählervariable setzten 
07.
Set /A "Counter=0"  
08.
FOR /F "delims=" %%A IN (%ort%) DO SET /A "Counter+=1" 
09.
 
10.
rem Zählervariable um 1 verringern 
11.
rem set /a "Counter1=%Counter%-1" 
12.
 
13.
rem gib die letzte Zeile der Textdatei in die Variable "var1" aus 
14.
FOR /F "tokens=1 delims=;" %%i IN (%ort2%) DO set "var1=%%i" 
15.
rem nimmt nur den Wert ab der siebten Stelle der Variable und schreibt sie in eine neue Variable 
16.
for /f "tokens=6 delims=, " %%i in ("%var1%") do set zeit2=%%i 
17.
rem nimmt den Wert ab der fünften Stelle 
18.
for /f "tokens=4 delims=, " %%i in ("%var1%") do set datum2=%%i 
19.
 
20.
rem gib eine bestimmte Zeile (n=Counter1(Vorletzte Zeile der Textdatei)) aus 
21.
Set /a cnt=1  
22.
Set /a n=%Counter%  
23.
for /F "tokens=1 delims=;" %%i in (%ort%) do call :setvarFixLine %n% "%%i"   
24.
for /f "tokens=7 delims=, " %%i in ("%Var%") do set zeit1=%%i 
25.
for /f "tokens=5 delims=, " %%i in ("%Var%") do set datum1=%%i 
26.
 
27.
if %datum1%==%datum2% goto gleich 
28.
if not %datum1%==%datum2% goto neu 
29.
 
30.
:gleich 
31.
rem wandelt das Zeitformat in sekunden um und lässt den Wert in Variablen schreiben 
32.
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100 
33.
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100 
34.
 
35.
Set /a DauerinStd=(start-stop) / 3600  
36.
Set /a DauerInMin=(start-stop-(DauerinStd*3600) ) / 60  
37.
set /a UndRestInSecs= (start-stop) -(DauerinStd*3600)- DauerInMin*60 
38.
goto formatieren 
39.
 
40.
:neu 
41.
 
42.
rem Zerlege die Zeit in Stunde Minute und Sekunde und wandle in Sekunden um 
43.
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a Von=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100) 
44.
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a Bis=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100) 
45.
 
46.
set /a Differenz=(86400+Bis-Von) %% 86400 
47.
 
48.
set /a Stunden=Differenz/3600 
49.
set /a Minuten=100+(Differenz %% 3600)/60 
50.
set /a Sekunden=100+(Differenz %% 60) 
51.
 
52.
goto neubere 
53.
 
54.
:formatieren 
55.
rem Formatiert die Variablen in richtiges Vormat 
56.
Set /a FmtSecs=UndRestInSecs+100  
57.
Set /a FmtMins=DauerInMin+100  
58.
Set /a FmtStd=DauerInStd+100 
59.
 
60.
rem ergebnis wird in die Datei gespeichert 
61.
echo %var1% : Dauer %FmtStd:~-2%:%FmtMins:~-2%:%FmtSecs:~-2% >> %ort% 
62.
 
63.
:neubere 
64.
 
65.
echo %var1% : Dauer %Stunden%:%Minuten:~-2%:%Sekunden:~-2% >> %ort% 
66.
 
67.
rem zum Berechnen der vorletzten Zeile 
68.
:setvarFixLine  
69.
If %cnt%==%1 Set Var=%~2  
70.
Set /a cnt+=1   
71.
goto :eof  
72.
 
73.
exit
Nochmals Vielen Dank
Bitte warten ..
Mitglied: ki-einheit
06.08.2010 um 16:54 Uhr
Hi leute,

ich wollte nicht gleich wegen einer Erweiterung des Skriptes einen neuen Thread aufmachen. Darum schreib ich ihn hier rein.

Also, ich habe mein Skript (Windows herunterfahren.bat) in soweit ergänzt, dass er jetzt auch den PC in den Standbymodus versetzten kann.
Es wird auch alles perfekt erledigt und auch gelogt.

Jetzt meine Frage bzgl. DIESEM Skript hier. In der Logdatei steht jetzt in der letzten Zeile "Energiesparmodus am .....". Das Skript arbeitet aber so, dass er die Zeit von PC-Start bis zum "Herunterfahren" abarbeiten soll.

Kann ich das Skript in soweit ergänzen, dass er die Zeile mit dem Energiesparmodus auslässt?

z.b. so:

01.
rem Zählervariable setzten 
02.
Set /A "Counter=0"  
03.
FOR /F "delims=" %%A IN (%ort%) DO SET /A "Counter+=1" 
04.
If Text="Energiesparmodus" then Counter-1
Oder so ähnlich. Damit er nur die Zeile nimmt, wo der PC gestartet wurde.

Ps. Die Zeile fürs Herunterfahren liest er aus der Temp.log ein.
Bitte warten ..
Mitglied: bastla
06.08.2010 um 18:45 Uhr
Hallo ki-einheit!

Soferne ich das richtig verstehe, könnte die Zeile 3 so aussehen:
FOR /F "delims=" %%A IN ('findstr /v "Energiesparmodus" %ort%') DO SET /A "Counter+=1"
Grüße
bastla
Bitte warten ..
Mitglied: ki-einheit
06.08.2010 um 20:42 Uhr
Leider nicht ganz.

Es soll schauen, ob in der Letzten Zeile das steht:

Energiesparmodus am 06.08.2010 um 16:43:02,36 Uhr

wenn ja, dann soll es diese Zeile Ignorieren. Denn bei der Zeile davor steht folgendes:

Zugegriffen von am 06.08.2010 um 11:49:29,88 Uhr

Und genau diese Zeile wird für die ganze berechnung nur benötigt.
Bitte warten ..
Mitglied: bastla
06.08.2010 um 22:41 Uhr
Hallo ki-einheit!

Wenn es nur um die letzte Zeile geht, dann eher so:
01.
set "Zeile=" 
02.
FOR /F "delims=" %%A IN (%ort%) DO SET /A "Counter+=1" & set "Zeile=%%A" 
03.
if defined Zeile echo "%Zeile%"|findstr "Energiesparmodus">nul && set /a Counter-=1
Grüße
bastla
Bitte warten ..
Mitglied: ki-einheit
07.08.2010 um 11:44 Uhr
Danke für die schnelle Hilfe. Hat funktioniert.

Ich weiß, dass es mal wieder keine Herausforderung war
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Installation
gelöst Mit Powershell in einer Datei eine Zeile auslesen (6)

Frage von Bommi1961 zum Thema Installation ...

Batch & Shell
gelöst Powershell funktioniert nicht richtig beim Auslesen der letzten Zeile (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Auslesen bestimmter Spalten aus csv (6)

Frage von Berti82 zum Thema Batch & Shell ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...