larz
Goto Top

Änderungsdatum einer Datei prüfen und wenn älter als x Mail senden

Hallo zusammen,

ich habe mir folgende Batch gebastelt, die eine Mail versendet wenn eine Datei entweder nicht vorhanden ist oder ihr Änderungsdatum älter als Heute -x

REM Script zur Überprüfung des Änderungsdatums einer Datei. Ist das Datum
REM älter als Heute -x wird eine Mail versendet
REM =============================================


REM Hier wird die Zieldatei definiert:
REM ----------------------------------
SET Zieldatei=\\server\freigabe\datei.txt
REM Hier wird die Dauer in Tagen angegeben, innerhalb der eine Änderung 
REM innerhalb dieser Datei stattgefunden haben muss:
SET LastModified=2


REM Hier werden die E-Mail-Parameter gesetzt:
REM -----------------------------------------
SET Sender=you@here.de
SET Password=yourpassword
SET SMTPServer=smtp.provider.de
SET Recipient=you@here.de




REM Schreibe aktuelles Datum und Uhrzeit in Log >> log.txt
ECHO Aktuelles Datum: >> log.txt
Date /t	>> log.txt
ECHO ------------------ >> log.txt
Echo Aktuelle Uhrzeit: >> log.txt
Time /t >> log.txt

REM Prüfung, ob die Datei existiert
IF NOT EXIST %Zieldatei% GOTO :FILEDOESNOTEXIST

WasFile %Zieldatei% modified after today-%LastModified% >> log.txt
if not errorlevel 1 goto TRUE >> log.txt

:LASTMODIFICATION >> log.txt
ECHO ==================================================================================== >> log.txt
ECHO Datei %Zieldatei% wurde innerhalb der letzten %LastModified% Tage nicht verändert, sende Mail >> log.txt
blat.exe -body "Die Datei %Zieldatei%  wurde innerhalb der letzten %LastModified% Tage nicht veraendert" -ps FOOTER.txt -to %Recipient% -subject "Letzte Aenderung zu lange her" -Server %SMTPServer% -f %Sender% -u %Sender% -pw %Password% >> log.txt  
ECHO ==================================================================================== >> log.txt
EXIT

:TRUE 
ECHO ==================================================================================== >> log.txt
ECHO Datei wurde innerhalb der letzten zwei Tage geändert >> log.txt
ECHO ==================================================================================== >> log.txt
EXIT

:ERROR
ECHO Datei nicht gefunden
EXIT

:FILEDOESNOTEXIST
ECHO ==================================================================================== >> log.txt
ECHO Die Datei %Zieldatei% existiert nicht oder kann nicht aufgerufen werden, sende Mail >> log.txt
blat.exe -body "Die Datei %Zieldatei% existiert nicht oder konnte nicht erreicht werden!" -ps FOOTER.txt -to %Recipient% -subject "Datei nicht existent oder unerreichbar" -Server %SMTPServer% -f %Sender% -u %Sender% -pw %Password% >> log.txt  
ECHO ==================================================================================== >> log.txt
EXIT

Das funktioniert so lange gut, wie die Datei auch immer gleich heißt. Nun möchte ich aber Sicherungen einer SQL-Datenbank prüfen lassen, deren Dateiname jeweils aus dem Datenbanknamen, dem Sicherungsdatum und der Endung .bak bestehen.
Man könnte doch sicherlich den vorhandenen Dateinamen einlesen, zerhackstückeln und dann erst prüfen lassen...

Weiß jemand Rat?

Danke und Gruß
Larz

Content-Key: 87259

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

Printed on: April 24, 2024 at 02:04 o'clock

Member: bastla
bastla May 08, 2008 at 16:50:04 (UTC)
Goto Top
Hallo Larz!

Man könnte doch sicherlich den vorhandenen Dateinamen einlesen, zerhackstückeln und dann erst prüfen lassen...
Wozu "zerhackstückeln" - Du prüfst doch ohnehin nicht den Dateinamen, sondern das Änderungsdatum ...

Wenn es immer nur um eine Datei geht, könntest Du als Ersatz für Dein
SET Zieldatei=\\server\freigabe\datei.txt
einfach ein
for %%i in ("\\server\freigabe\*.bak") do set "Zieldatei=%%~fi"  
verwenden und den Rest gleich lassen.

Sollten mehrere .bak-Dateien herumliegen, könntest Du die neueste davon suchen lassen:
set "Pfad=\\server\freigabe"  
for /f "delims=" %%i in ('dir /b /a-d /od "%Pfad%\*.bak"') do set "Zieldatei=%Pfad%\%%i"  

Grüße
bastla
Member: Larz
Larz May 13, 2008 at 11:49:11 (UTC)
Goto Top
Hallo bastla,

habe deinen zweiten Vorschlag eingebaut, mein Ergebnis sieht so aus und funktioniert einwandfrei:

REM Script zur Überprüfung des Änderungsdatums einer Datei. Ist das Datum
REM älter als Heute -%Lastmodified% wird eine Mail versendet
REM =============================================

REM hier wird der zu prüfende Dateityp (nur Suffix, ohne *.) angegeben
REM ----------------------------------
SET Filetype=bak

REM Hier wird der Speicherort Zieldatei definiert:
REM ----------------------------------
SET Pfad=\\server\freigabe

FOR /f "delims=" %%i in ('dir /b /a-d /od "%Pfad%\*.%Filetype%"') do set "Zieldatei=%Pfad%\%%i"  

REM Hier wird die Dauer in Tagen angegeben, innerhalb der eine Änderung 
REM der neuesten Datei dieses Typs im Verzeichnis stattgefunden haben muss:
REM ----------------------------------
SET LastModified=2


REM Hier werden die E-Mail-Parameter gesetzt:
REM -----------------------------------------
SET Sender=Sender@Mail-Domäne.de
SET Password=passwort
SET SMTPServer=smtp.Mail-Domäne.de
SET Recipient=Empfänger@Mail-Domäne.de




REM =============================================
REM =============================================
REM        AB HIER NICHTS MEHR VERÄNDERN!
REM =============================================
REM =============================================


REM Lösche vorletzte Log-Datei
DEL lastlog.txt

REM Umbenennung letztes Log in vorletztes Log
REN log.txt lastlog.txt

REM Schreibe aktuelles Datum und Uhrzeit in Log >> log.txt
ECHO Aktuelles Datum: >> log.txt
Date /t	>> log.txt
ECHO ------------------ >> log.txt
Echo Aktuelle Uhrzeit: >> log.txt
Time /t >> log.txt

REM Prüfung, ob eine Datei dies definierten Typs dort existiert
IF NOT EXIST %Pfad%\*.%Filetype% GOTO :FILEDOESNOTEXIST

WasFile %Zieldatei% modified after today-%LastModified% >> log.txt
if not errorlevel 1 goto TRUE >> log.txt

:LASTMODIFICATION >> log.txt
ECHO ==================================================================================== >> log.txt
ECHO Datei %Zieldatei% wurde innerhalb der letzten %LastModified% Tage nicht verändert, sende Mail >> log.txt
blat.exe -body "Die Datei %Zieldatei%  wurde innerhalb der letzten %LastModified% Tage nicht veraendert" -ps FOOTER.txt -to %Recipient% -subject "Letzte Aenderung zu lange her" -Server %SMTPServer% -f %Sender% -u %Sender% -pw %Password% >> log.txt  
ECHO ==================================================================================== >> log.txt
EXIT

:TRUE 
ECHO ==================================================================================== >> log.txt
ECHO %Zieldatei% wurde innerhalb der letzten %Lastmodified% Tage geändert >> log.txt
ECHO ==================================================================================== >> log.txt
EXIT

:ERROR
ECHO Datei nicht gefunden
EXIT

:FILEDOESNOTEXIST
ECHO ==================================================================================== >> log.txt
ECHO Eine *.%Filetype%-Datei existiert nicht oder kann nicht aufgerufen werden, sende Mail >> log.txt
blat.exe -body "Eine %Filetype%-Datei existiert nicht oder konnte nicht erreicht werden!" -ps FOOTER.txt -to %Recipient% -subject "Datei nicht existent oder unerreichbar" -Server %SMTPServer% -f %Sender% -u %Sender% -pw %Password% >> log.txt  
ECHO ==================================================================================== >> log.txt
EXIT

Für Nachbauer - man benötigt im selben Verzeichnis noch die Dateien log.txt (aktuelles Log), lastlog.txt (vorletztes Log), footer.txt (Hier ist nur ein Hinweis auf den Author des Scripts drin), blat.exe (der Kommandozeilen-Mailer) und WasFile.exe (um das Änderungsdatum auszuwerten.

Grüße & Danke
Larz