ki-einheit
Goto Top

Bestimmter Abschnitt einer Zeile auslesen

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

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

echo Zugegriffen von %username% am %date% um %time% Uhr >> C:\log\logfile_%username%.ini
Ebenso hab ich eine "beendenbat" geschrieben:
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:


bisher ist Dies mein Quellcode:

@echo off

rem Zählervariable setzten
Set /A "Counter=0"   
FOR /F "delims=" %%A IN (c:\log\logfile_%username%.ini) DO SET /A "Counter+=1"  
rem Zählervariable um 1 verringern
set /a "Counter1=%Counter%-1"  
rem gib die letzte Zeile in der Textdatei aus
FOR /F "tokens=1 delims=," %%i IN (c:\log\logfile_%username%.ini) DO set var1=%%i  
echo %var1%
rem gib eine bestimmte Zeile (n=Counter1(Vorletzte Zeile der Textdatei)) aus
Set /a cnt=1 
Set /a n=%Counter1% 
for /F "tokens=1 delims=," %%i in (c:\log\logfile_%username%.ini) do call :setvarFixLine %n% "%%i"    
Echo %Var%

pause
rem zum Berechnen der vorletzten Zeile
:setvarFixLine 
If %cnt%==%1 Set Var=%~2 
Set /a cnt+=1  
goto :eof 

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

Content-Key: 145681

Url: https://administrator.de/contentid/145681

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: 86263
86263 25.06.2010 um 14:44:03 Uhr
Goto Top
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:
for /f "tokens=7 delims= " %i in (x.txt) do @echo %i  
Mitglied: ki-einheit
ki-einheit 25.06.2010 um 14:59:09 Uhr
Goto Top
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

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.
Mitglied: Biber
Biber 25.06.2010 um 15:14:12 Uhr
Goto Top
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
Mitglied: 86263
86263 25.06.2010 um 15:18:08 Uhr
Goto Top
Kurze Verständnisfrage:
  • Was steht in den beiden Variable
  • Was möchtest du mit dieser FOR-Schleife erreichen
Mitglied: ki-einheit
ki-einheit 25.06.2010 um 15:43:39 Uhr
Goto Top
@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.
Mitglied: 86263
86263 25.06.2010 um 15:54:22 Uhr
Goto Top
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. face-wink
Mitglied: bastla
bastla 25.06.2010 um 15:55:25 Uhr
Goto Top
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
Mitglied: ki-einheit
ki-einheit 25.06.2010 um 16:00:05 Uhr
Goto Top
Tatsache. Da war der Fehler face-big-smile
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

set /a berechnen=%zeit2%-%zeit1%
echo %berechnen%
pause
Mitglied: ki-einheit
ki-einheit 25.06.2010 um 16:44:33 Uhr
Goto Top
Ich habs schon hinbekommen. Es funktioniert jetzt alles zur Zufriedenheit face-smile

Habt nochmals alle Vielen Dank für die Hilfen.
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 11:37:21 Uhr
Goto Top
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)

if %datum1%==%datum2% goto gleich
if not %datum1%==%datum2% goto neu

REM fehlender operatior
set /a "mitternacht=24:00:00"  
for /f "tokens=1-3 delims=:," %%i in ("%mitternacht%") do set /a neuzeit=%%i*3600+60*(1%%j %% 100)+1%%k-100  
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100  
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100  

Set /a DauerinStd=(neuzeit-start+stop) / 3600 
Set /a DauerInMin=(neuzeit-start+stop-(DauerinStd*3600) ) / 60 
set /a UndRestInSecs= (neuzeit-start+stop) -(DauerinStd*3600)- DauerInMin*60
goto formatieren

:formatieren
rem Formatiert die Variablen in richtiges Vormat
Set /a FmtSecs=UndRestInSecs+100 
Set /a FmtMins=DauerInMin+100 
Set /a FmtStd=DauerInStd+100

rem ergebnis wird in die Datei gespeichert
echo %var1% : Dauer %FmtStd:~-2%:%FmtMins:~-2%:%FmtSecs:~-2%
pause

Hat jemand eine Idee, woran die Fehlrechnung liegen könnte und wo bitteschön ein Operator fehlt ???
Mitglied: bastla
bastla 29.06.2010 um 11:45:27 Uhr
Goto Top
Hallo ki-einheit!

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

Grüße
bastla
Mitglied: Biber
Biber 29.06.2010 um 12:11:26 Uhr
Goto Top
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
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 12:16:00 Uhr
Goto Top
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
Mitglied: Biber
Biber 29.06.2010 um 12:39:56 Uhr
Goto Top
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
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 13:03:15 Uhr
Goto Top
Danke Biber. Ich werd mal versuchen, etwas hinzuzimmern. Werd das ergebnis dann später mal Posten, ok?

KI-Einheit
Mitglied: Biber
Biber 29.06.2010 um 13:48:05 Uhr
Goto Top
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
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 14:05:03 Uhr
Goto Top
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 face-smile

Der code gibt mir leider am Ende die Minuten nicht aus, sonder einfach eine 0.
rem Zerlege die Zeit in Stunde Minute und Sekunde
for /f "tokens=1-1 delims=:," %%i in ("%zeit1%") do set /a stundea=%%i  
for /f "tokens=2-2 delims=:," %%i in ("%zeit1%") do set /a minutea=%%i  
for /f "tokens=3-3 delims=:," %%i in ("%zeit1%") do set /a sekundea=%%i  

rem Das selbe auch mit der zweiten Zeit
for /f "tokens=1-1 delims=:," %%i in ("%zeit2%") do set /a stundeb=%%i  
for /f "tokens=2-2 delims=:," %%i in ("%zeit2%") do set /a minuteb=%%i  
for /f "tokens=3-3 delims=:," %%i in ("%zeit2%") do set /a sekundeb=%%i  

rem Abfrage der Zeitangaben und berechnen
if not %stundeb%=="0" if not %minuteb%=="0" set /a codea=(24*60)-(stundea*60)+(stundeb*60)-minutea+minuteb  
if %stundeb%=="0" if not %minuteb%=="0" set /a codea=(24*60) -(stundea*60)- minutea + minuteb  
if not %stundeb%=="0" if %minuteb%=="0" set /a codea=(24*60)-(stundea*60)+(stundeb*60)-minutea  

rem richtiges Zeitformat bestimmen
set /a codeb=codea/60
set /a codec=codea/(60*60)*100

echo %codea%= %codeb% + %codec%
pause
exit
Mitglied: bastla
bastla 29.06.2010 um 16:16:04 Uhr
Goto Top
Hallo ki-einheit!

Abgesehen davon, dass die Zerlegung so
rem Zerlege die Zeit in Stunde Minute und Sekunde
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do (  
    set /a stundea=%%i
    set /a minutea=1%%j %% 100
    set /a sekundea=1%%k %% 100
)
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
Mitglied: Biber
Biber 29.06.2010 um 17:17:02 Uhr
Goto Top
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]
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 18:18:49 Uhr
Goto Top
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.

for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do (   
    set /a stundeb=%%i 
    set /a minuteb=1%%j %% 100 
    set /a sekundeb=1%%k %% 100 
)

rem Abfrage der Zeitangaben und berechnen
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%

if not %stundeb%==0 if not %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea%

if not %stundeb%==0 if %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea%-%sekundea%+%sekundeb%

if not %stundeb%==0 if %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60)-(%stundea%*60)+(%stundeb%*60)-%minutea%

if %stundeb%==0 if not %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60) -(%stundea%*60)-%minutea% + %minuteb%+%sekundea%-%sekundeb%

if %stundeb%==0 if not %minuteb%==00 if %sekundeb%==00 set /a codea=(24*60) -(%stundea%*60)-%minutea% + %minuteb%

if %stundeb%==0 if %minuteb%==00 if not %sekundeb%==00 set /a codea=(24*60*60) -(%stundea%*60)- %sekundea% + %sekundeb%


rem richtiges Zeitformat bestimmen
set /a codeb=%codea%/60
set /a codec=%codea%*100 /(60*60)
set /a coded=%codea%*1000 /(60*60*60)
echo %codea%= %codeb% + %codec% + %coded%
pause
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
Mitglied: bastla
bastla 29.06.2010 um 18:33:48 Uhr
Goto Top
Hallo ki-einheit!

Bibers (Modulo-)Vorschläge ließen sich etwa so umsetzen:
rem Zerlege die Zeit in Stunde Minute und Sekunde und wandle in Sekunden um
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a Von=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100)  
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a Bis=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100)  

set /a Differenz=(86400+Bis-Von) %% 86400

set /a Stunden=Differenz/3600
set /a Minuten=100+(Differenz %% 3600)/60
set /a Sekunden=100+(Differenz %% 60)

echo %Differenz% Sekunden = %Stunden%:%Minuten:~-2%:%Sekunden:~-2%
Grüße
bastla
Mitglied: ki-einheit
ki-einheit 29.06.2010 um 18:57:32 Uhr
Goto Top
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:

@echo off
rem set "ort=c:\log\logfile_%username%.ini"  
set "ort=c:\log\logfile_%username%.ini"  
set "ort2=c:\log\temp.txt"  

rem Zählervariable setzten
Set /A "Counter=0"   
FOR /F "delims=" %%A IN (%ort%) DO SET /A "Counter+=1"  

rem Zählervariable um 1 verringern
rem set /a "Counter1=%Counter%-1"  

rem gib die letzte Zeile der Textdatei in die Variable "var1" aus  
FOR /F "tokens=1 delims=;" %%i IN (%ort2%) DO set "var1=%%i"  
rem nimmt nur den Wert ab der siebten Stelle der Variable und schreibt sie in eine neue Variable
for /f "tokens=6 delims=, " %%i in ("%var1%") do set zeit2=%%i  
rem nimmt den Wert ab der fünften Stelle
for /f "tokens=4 delims=, " %%i in ("%var1%") do set datum2=%%i  

rem gib eine bestimmte Zeile (n=Counter1(Vorletzte Zeile der Textdatei)) aus
Set /a cnt=1 
Set /a n=%Counter% 
for /F "tokens=1 delims=;" %%i in (%ort%) do call :setvarFixLine %n% "%%i"    
for /f "tokens=7 delims=, " %%i in ("%Var%") do set zeit1=%%i  
for /f "tokens=5 delims=, " %%i in ("%Var%") do set datum1=%%i  

if %datum1%==%datum2% goto gleich
if not %datum1%==%datum2% goto neu

:gleich
rem wandelt das Zeitformat in sekunden um und lässt den Wert in Variablen schreiben
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a start=%%i*3600+60*(1%%j %% 100)+1%%k-100  
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a stop=%%i*3600+60*(1%%j %% 100)+1%%k-100  

Set /a DauerinStd=(start-stop) / 3600 
Set /a DauerInMin=(start-stop-(DauerinStd*3600) ) / 60 
set /a UndRestInSecs= (start-stop) -(DauerinStd*3600)- DauerInMin*60
goto formatieren

:neu

rem Zerlege die Zeit in Stunde Minute und Sekunde und wandle in Sekunden um
for /f "tokens=1-3 delims=:," %%i in ("%zeit1%") do set /a Von=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100)  
for /f "tokens=1-3 delims=:," %%i in ("%zeit2%") do set /a Bis=%%i*3600+(1%%j %% 100)*60+(1%%k %% 100)  

set /a Differenz=(86400+Bis-Von) %% 86400

set /a Stunden=Differenz/3600
set /a Minuten=100+(Differenz %% 3600)/60
set /a Sekunden=100+(Differenz %% 60)

goto neubere

:formatieren
rem Formatiert die Variablen in richtiges Vormat
Set /a FmtSecs=UndRestInSecs+100 
Set /a FmtMins=DauerInMin+100 
Set /a FmtStd=DauerInStd+100

rem ergebnis wird in die Datei gespeichert
echo %var1% : Dauer %FmtStd:~-2%:%FmtMins:~-2%:%FmtSecs:~-2% >> %ort%

:neubere

echo %var1% : Dauer %Stunden%:%Minuten:~-2%:%Sekunden:~-2% >> %ort%

rem zum Berechnen der vorletzten Zeile
:setvarFixLine 
If %cnt%==%1 Set Var=%~2 
Set /a cnt+=1  
goto :eof 

exit

Nochmals Vielen Dank
Mitglied: ki-einheit
ki-einheit 06.08.2010 um 16:54:55 Uhr
Goto Top
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:

rem Zählervariable setzten
Set /A "Counter=0"   
FOR /F "delims=" %%A IN (%ort%) DO SET /A "Counter+=1"  
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.
Mitglied: bastla
bastla 06.08.2010 um 18:45:02 Uhr
Goto Top
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
Mitglied: ki-einheit
ki-einheit 06.08.2010 um 20:42:27 Uhr
Goto Top
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.
Mitglied: bastla
bastla 06.08.2010 um 22:41:47 Uhr
Goto Top
Hallo ki-einheit!

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

Ich weiß, dass es mal wieder keine Herausforderung war face-big-smile