chavez089
Goto Top

Batch soll Datum aus File auslesen.

Lese hier schon länger mit, habe nun auch eine Frage.

Per Batch (Win XP) wird jeden Tag der Inhalt eines Directories in eine Datei geschrieben. In diesem Directory stehen Log Files von einer Datensicherung.
Das neueste Logfile mit Datum steht immer oben.

Ich möchte nun automatisch jeden Tag einmal abchecken lassen, ob die Logfiles für den aktuellen Tag angelegt worden sind, also ob die Sicherung gelaufen ist (wenn die Sicherung nicht gelaufen ist, wird nämlich kein Logfile angelegt).

Es soll daher das aktuelle Datum vom Rechner mit den Datumseinträgen im Logfile verglichen werden, wenn im Logfile kein aktuelles Datum drinsteht, möchte ich mit mit "Blat" eine Email zusenden lassen.

Ich hoffe, ich konnte mich verständlich ausdrücken.

Content-Key: 155228

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

Printed on: April 25, 2024 at 20:04 o'clock

Member: micneu
micneu Nov 17, 2010 at 09:10:41 (UTC)
Goto Top
wie siht denn dein code bis jetzt aus?

daruf können wir dann aufbauen?

wie ist die form deiner logdatei.
wie ist das datum aufgebaut (2010-11-16)?
die angaben könnten helfen.

gruß michael
Member: micneu
micneu Nov 17, 2010 at 09:25:39 (UTC)
Goto Top
habe erstmal einen groben ansatz:

rem getestet auf einem windows 7 ultimate 64bit
rem @echo off
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set sekunden=%time:~-5,2%
set minuten=%time:~-8,2%
set stunden=%time:~-11,2%

forfiles /p "C:\Temp" -D %tag%.%monat%.%jahr% /C "cmd /c echo @fname ist seit dem %tag%.%monat%.%jahr% neu"  
pause

und in der datei kannst du dann mit findstr suchen

gruß michael
Member: chavez089
chavez089 Nov 17, 2010 at 11:01:22 (UTC)
Goto Top
Hallo Michael,

das Logfile ist folgendermassen aufgebaut:

Volume in Laufwerk I: hat keine Bezeichnung.
Volumeseriennummer: EC08-CBE4

Verzeichnis von I:\logs

17.11.2010 07:59 <DIR> ..
17.11.2010 07:59 <DIR> .
17.11.2010 07:30 553 20101116102900.510.eup
17.11.2010 07:30 43.524 20101116102900.510.euc
17.11.2010 07:30 0 20100604114200.502.$$Z
17.11.2010 07:30 0 20100604114200.502.$$$
17.11.2010 07:30 0 20090629105000.502.$$Z
17.11.2010 07:30 0 20090629105000.502.$$$
17.11.2010 07:30 0 20090523103100.502.$$$
17.11.2010 07:30 0 20090523103100.502.$$Z
17.11.2010 07:30 0 20070420094400.502.$$$
17.11.2010 07:30 0 20070420094400.502.$$Z
17.11.2010 07:30 44.082 20101116101500.400.euc
17.11.2010 07:30 3.318 20101116101500.400.eup
17.11.2010 07:30 0 20090410102600.203.$$Z
17.11.2010 07:30 0 20090410102600.203.$$$
17.11.2010 07:30 0 20090425112900.202.$$$
17.11.2010 07:30 0 20090425112900.202.$$Z
17.11.2010 07:30 0 20090503101400.201.$$$
17.11.2010 07:30 0 20090503101400.201.$$Z
17.11.2010 07:30 0 20090913115400.116.$$$
17.11.2010 07:30 0 20090913115400.116.$$Z
17.11.2010 07:30 121.272 20101116105400.100.euc
17.11.2010 07:30 6.873 20101116105400.100.eup
16.11.2010 07:30 5.394 20101115133700.603.euc
16.11.2010 07:30 1.817 20101115133700.603.eup
16.11.2010 07:30 0 20101115115200.502.euc
16.11.2010 07:30 0 20101115115200.502.eup
16.11.2010 07:30 711 20101115094300.412.eup
16.11.2010 07:30 2.790 20101115094300.412.euc

ich benötige nur das erste aktuelle Datum, welches mit dem Rechnerdatum übereinstimmen muss.
Member: pieh-ejdsch
pieh-ejdsch Nov 17, 2010 at 12:03:50 (UTC)
Goto Top
moin zusammen,

dazu genügt nur eine ProduktivZeile

@echo off&setlocal
set "mailadr=name@domain.de"  
set "mailLogin=Zugang"  
set "mailpw=PW"  
set "server=mail.domain.net"  
set "To=name@domain.de"  
set subject="Keine aktuelle Sicherung vom %date% vorhanden"  
set body="Tagessicherung für %date% nachholen!"  

dir I:\logs\* /a-d /tc|findstr /b /c:"%date%" >nul || blat -subject %subject% -body %body% -to %to% -server %server% -f %mailadr% -u %mailLogin% -pw %mailpw%  

[Edit] && mit Oder ausgetauscht [/Edit]

Gruß Phil
Member: chavez089
chavez089 Nov 17, 2010 at 13:15:24 (UTC)
Goto Top
Zitat von @pieh-ejdsch:
moin zusammen,

dazu genügt nur eine ProduktivZeile

@echo off&setlocal
> set "mailadr=name@domain.de"  
> set "mailLogin=Zugang"  
> set "mailpw=PW"  
> set "server=mail.domain.net"  
> set "To=name@domain.de"  
> set subject="Keine aktuelle Sicherung vom %date% vorhanden"  
> set body="Tagessicherung für %date% nachholen!"  
> 
> dir I:\logs\* /a-d /tc|findstr /b /c:"%date%" >nul || blat -subject %subject% -body %body% -to %to% -server %server%  
> -f %mailadr% -u %mailLogin% -pw %mailpw%

[Edit] && mit Oder ausgetauscht [/Edit]

Gruß Phil
#

Hallo Phil,

Dein Script vergleicht, so wie ich das sehe, nur das Datum, wann die Logdatei erstellt worden ist. Ich bräuchte es aber auf den Inhalt bezogen (also das Datum, das innerhalb des Logfiles steht, z.B. 17.11.2010 07:30 553 20101116102900.510.eup, denn das Logfile wird auch angelegt, wenn kein Backup gemacht wurde.)
Member: bastla
bastla Nov 17, 2010 at 14:30:42 (UTC)
Goto Top
Hallo chavez089 und willkommen im Forum!

Wenn Du tatsächlich nur auf die Inhalte des Logfiles abstellen willst und nach einer Datei vom Typ "eup" mit heutigem Datum suchst, dann als Zeile 10 etwas in der Art (ungetestet):
findstr /e "\.eup" "D:\Das Logfile.log"|findstr /b "%date%" || blat -subject %subject% -body %body% -to %to% -server %server% -f %mailadr% -u %mailLogin% -pw %mailpw%
Grüße
bastla
Member: micneu
micneu Nov 17, 2010 at 15:54:35 (UTC)
Goto Top
ich habe es jetzt so gemacht:

@echo off
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set sekunden=%time:~-5,2%
set minuten=%time:~-8,2%
set stunden=%time:~-11,2%

forfiles /p "C:\Temp" /M *2.txt -D %tag%.%monat%.%jahr% /C "cmd /c findstr /B /M %tag%.%monat%.%jahr% @file || echo "wurde nicht gefunden oder deine mail"   
pause
hier wirt in der datei auch nochmal das datum gesucht.

gruß michael
Member: chavez089
chavez089 Nov 17, 2010 at 21:21:23 (UTC)
Goto Top
Zitat von @bastla:
Hallo chavez089 und willkommen im Forum!

Wenn Du tatsächlich nur auf die Inhalte des Logfiles abstellen willst und nach einer Datei vom Typ "eup" mit
heutigem Datum suchst, dann als Zeile 10 etwas in der Art (ungetestet):
findstr /e "\.eup" "D:\Das Logfile.log"|findstr /b "%date%" ||
> blat -subject %subject% -body %body% -to %to% -server %server% -f %mailadr% -u %mailLogin% -pw %mailpw%
> 
Grüße
bastla

Super ich danke sehr für die Lösung, das war genau das was ich brauche!