dos befehl - aktuellste Datei
Hallo,
ich möchte mittels eines Dos-Befehls, immer die akutellste Log-Datei (Datensicherung) per e-mail übermitteln.
Das script schaut wie folgt aus:
"\\...\...\mailsend.exe" "mailserver" "Administrator@....de" "user@....de" "Datensicherung server" "Datensicherung server ist abgeschlossen. Details siehe Log-Datei. Gruss " "\\...\...\...\backup04.log"
in dem Ordner wird jetzt täglich eine log-Datei angelegt (backup05.log, backup06.log usw.)
anstatt "backup04.log" muss ich jetzt natürlich eine variable eingeben, sodass immer die neueste log-datei geschickt wird, wie geht das???
Danke im voraus
ich möchte mittels eines Dos-Befehls, immer die akutellste Log-Datei (Datensicherung) per e-mail übermitteln.
Das script schaut wie folgt aus:
"\\...\...\mailsend.exe" "mailserver" "Administrator@....de" "user@....de" "Datensicherung server" "Datensicherung server ist abgeschlossen. Details siehe Log-Datei. Gruss " "\\...\...\...\backup04.log"
in dem Ordner wird jetzt täglich eine log-Datei angelegt (backup05.log, backup06.log usw.)
anstatt "backup04.log" muss ich jetzt natürlich eine variable eingeben, sodass immer die neueste log-datei geschickt wird, wie geht das???
Danke im voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 17239
Url: https://administrator.de/contentid/17239
Ausgedruckt am: 25.11.2024 um 22:11 Uhr
18 Kommentare
Neuester Kommentar
Moin admin-lif,
Einen Dos-Befehl zur Ermittlung der aktuellsten Datei kenn ich nicht.
Umgehungsstrategie:
Im Batch:
...
for /f %%i in ('dir /oD /b \\...\...\...\backup*.log') do @set newestlog=%%i
Dann steht in der Variablen %newestlog% der Name der neuesten Backup??.log.
Und wenn Du Deine letzte Mail-Zeile schreibst, musst Du dann diese Variable einsetzen.
also statt bisher "\\...\...\...\backup04.log"
jetzt schreiben "\\...\...\...\%newestlog%"
HTH
Frank / der Biber aus Bremen
Einen Dos-Befehl zur Ermittlung der aktuellsten Datei kenn ich nicht.
Umgehungsstrategie:
Im Batch:
...
for /f %%i in ('dir /oD /b \\...\...\...\backup*.log') do @set newestlog=%%i
Dann steht in der Variablen %newestlog% der Name der neuesten Backup??.log.
Und wenn Du Deine letzte Mail-Zeile schreibst, musst Du dann diese Variable einsetzen.
also statt bisher "\\...\...\...\backup04.log"
jetzt schreiben "\\...\...\...\%newestlog%"
HTH
Frank / der Biber aus Bremen
Moin, admin-lif,
*axelzuck*
Was soll ich sagen? Ich hab nur an der Stelle in Deinem Script-Auszug, wo bisher fest verdrahtet "backup04.log" stand, eine Variable eingesetzt...
Wenn er diese backup.log bisher angefügt hat und nicht angezeigt, dann sollte er das auch mit der backup05.log, backup17.log oder welcher auch immer machen.
Sonst poste noch mal bitte Dein Scriptchen hier unten. Oben ist es etwas schwer lesbar.
Biber
*axelzuck*
Was soll ich sagen? Ich hab nur an der Stelle in Deinem Script-Auszug, wo bisher fest verdrahtet "backup04.log" stand, eine Variable eingesetzt...
Wenn er diese backup.log bisher angefügt hat und nicht angezeigt, dann sollte er das auch mit der backup05.log, backup17.log oder welcher auch immer machen.
Sonst poste noch mal bitte Dein Scriptchen hier unten. Oben ist es etwas schwer lesbar.
Biber
Moin, admin-lif,
ich würde -nach der Zeile "Ermittlung von %newestlog%" diese Datei nach dem String absuchen mit find.
Also z.B.
Type "\\...\...\...\%newestlog%"|Find /i "erfolgreich" >nul
IF Errorlevel 1 goto :eof
::Errorlevel 1 = String nicht gefunden, also auch nicht mailen
:: ... und hier kommen Deine Mailzeugs-Zeilen rein unverändert wie oben.
...
~~~~~~~
Anmerkung: Du solltest aber darauf achten, dass der Suchstring auch nur in OK-Logs steht.
Nicht etwa, dass im Fehlerfall dort "Nicht erfolgreich!!" geschrieben wird.
Grüße
Biber
ich würde -nach der Zeile "Ermittlung von %newestlog%" diese Datei nach dem String absuchen mit find.
Also z.B.
Type "\\...\...\...\%newestlog%"|Find /i "erfolgreich" >nul
IF Errorlevel 1 goto :eof
::Errorlevel 1 = String nicht gefunden, also auch nicht mailen
:: ... und hier kommen Deine Mailzeugs-Zeilen rein unverändert wie oben.
...
~~~~~~~
Anmerkung: Du solltest aber darauf achten, dass der Suchstring auch nur in OK-Logs steht.
Nicht etwa, dass im Fehlerfall dort "Nicht erfolgreich!!" geschrieben wird.
Grüße
Biber
Tscha, admin-lif,
dann nützt uns zur Beantwortung der Frage nur das ganze Skript.
Entweder posten oder, wenn es Dir dafür zu lang/zu geheim erscheint, per pn an irgendeinen, der Spaß an so was hat.
Wenn Du keinen findest, dann halt an mich.
Biber
[Edit]
Grundsätzlich wäre der plumpeste Ansatz, der sicherlich auch erst mal Dein Problem behebt, überall dort, wo jetzt "goto :eof" steht, ein "goto ServerSicherung2", "goto ServerSicherung3" usw. zu schreiben und an den Beginn jeder neuen Serversicherung eben eine Sprungmarke ":Serversicherung2", ":Serversicherung3" etc. zu setzen.
Aber -zig Mal die funktional gleichen Blöcke (die sich nur in Servernamen und Pfaden unterscheiden) per Copy & Paste untereinanderzustellen - so etwas tut man/frau einfach nicht! Auch nicht in Bätchen.
Ist viel zu fehlerträchtig und nicht wartbar. Also von daher off limits für Admins.
[/Edit]
dann nützt uns zur Beantwortung der Frage nur das ganze Skript.
Entweder posten oder, wenn es Dir dafür zu lang/zu geheim erscheint, per pn an irgendeinen, der Spaß an so was hat.
Wenn Du keinen findest, dann halt an mich.
Biber
[Edit]
Grundsätzlich wäre der plumpeste Ansatz, der sicherlich auch erst mal Dein Problem behebt, überall dort, wo jetzt "goto :eof" steht, ein "goto ServerSicherung2", "goto ServerSicherung3" usw. zu schreiben und an den Beginn jeder neuen Serversicherung eben eine Sprungmarke ":Serversicherung2", ":Serversicherung3" etc. zu setzen.
Aber -zig Mal die funktional gleichen Blöcke (die sich nur in Servernamen und Pfaden unterscheiden) per Copy & Paste untereinanderzustellen - so etwas tut man/frau einfach nicht! Auch nicht in Bätchen.
Ist viel zu fehlerträchtig und nicht wartbar. Also von daher off limits für Admins.
[/Edit]
Moin, admin_lif,
natürlich gäbe es noch ein, zwei andere Strategien, die es dir ermöglichen würde, die aktuellste Datei zu finden, ohne eine Liste von Dateien zu durchlaufen.
Aber das wären eben ganz andere Strategien und die erfordern an anderer Stelle ein oder zwei Programmzeilen mehr.
Beispiel (die Strategie-Entwicklung in Zeitlupe): Im Moment ist eine FOR-Schleife ja nötig, weil vom DIR-Befehl mehrere Dateien gefunden werden. Eine Liste eben. Wenn nur EINE Datei gefunden werden würde, bräuchte ich keine For-Schleife. Wen ich nur eine einzige als Rückgabe des Dir-Befehls bekommen will, kann ich das natürlich erreichen auf mehrere Arten. Wenn ich für die neueste BackupXX.log-Datei ein Kriterium finde, dass sie einzigartig macht.
Was kommt in Frage/steht zur Wahl? Name, Größe, Attribute, Erstellungsdatum.
Name - einzig ja... aber nicht bekannt oder ermittelbar ohne zusätzliche Loggerei (s.u.)
Größe - wertlos für eine Prüfung.
Erstellungsdatum - das ginge. Wenn der Batch als Dienst täglich läuft und die Backup-Datei immer von heute ist (falls überhaupt vorhanden)...das kann ich prüfen.
Über "Attribut" könnte ich ebenso genau eine Log-Datei finden.
Es gibt bei DIR den Schalter /A:A (nur Dateien mit Attribut "zu archivieren")
Wenn Du also alle Log-Dateien, die Du bereits archivierst bzw. gemailt hast, als "erledigt" kennzeichnest mit
Weiterhin könntest Du
- alle gemailten *.log-Dateien in diesem Verzeichnis verschieben oder umbenennen. Bleibt dann auch nur eine Datei über.
- den Namen der letzten gemailten Datei in eine Mini-Mini-Logdatei schreiben. Wenn da dann Backup27.log drinsteht, ist dann als nächstes Backup28.log dran...
Viele Wege nach Rom.. poste doch, was Du hast, dann ist es mit Tipps einfacher.
Grüße
Frank / der Biber aus Bremen
natürlich gäbe es noch ein, zwei andere Strategien, die es dir ermöglichen würde, die aktuellste Datei zu finden, ohne eine Liste von Dateien zu durchlaufen.
Aber das wären eben ganz andere Strategien und die erfordern an anderer Stelle ein oder zwei Programmzeilen mehr.
Beispiel (die Strategie-Entwicklung in Zeitlupe): Im Moment ist eine FOR-Schleife ja nötig, weil vom DIR-Befehl mehrere Dateien gefunden werden. Eine Liste eben. Wenn nur EINE Datei gefunden werden würde, bräuchte ich keine For-Schleife. Wen ich nur eine einzige als Rückgabe des Dir-Befehls bekommen will, kann ich das natürlich erreichen auf mehrere Arten. Wenn ich für die neueste BackupXX.log-Datei ein Kriterium finde, dass sie einzigartig macht.
Was kommt in Frage/steht zur Wahl? Name, Größe, Attribute, Erstellungsdatum.
Name - einzig ja... aber nicht bekannt oder ermittelbar ohne zusätzliche Loggerei (s.u.)
Größe - wertlos für eine Prüfung.
Erstellungsdatum - das ginge. Wenn der Batch als Dienst täglich läuft und die Backup-Datei immer von heute ist (falls überhaupt vorhanden)...das kann ich prüfen.
>echo %Date%
Mo 24.10.2005
>dir *.log |find "%date:~-10%"
24.10.2005 12:54 1227 Backup07.log
Es gibt bei DIR den Schalter /A:A (nur Dateien mit Attribut "zu archivieren")
Wenn Du also alle Log-Dateien, die Du bereits archivierst bzw. gemailt hast, als "erledigt" kennzeichnest mit
attrib %newestlog% -A
nach dem Mailen... dann ist die neu angelegte BackupYY.Log die einzige, die gefunden wird beiDir /A:A backup??.log
Weiterhin könntest Du
- alle gemailten *.log-Dateien in diesem Verzeichnis verschieben oder umbenennen. Bleibt dann auch nur eine Datei über.
- den Namen der letzten gemailten Datei in eine Mini-Mini-Logdatei schreiben. Wenn da dann Backup27.log drinsteht, ist dann als nächstes Backup28.log dran...
Viele Wege nach Rom.. poste doch, was Du hast, dann ist es mit Tipps einfacher.
Grüße
Frank / der Biber aus Bremen
Moin admin-lif.
es gab hier im Forum schon mehrfache Ansätze zum "Batch-Umbenennen mit Zähler/laufender Nummer" oder ähnlich. Hab ich leider nicht in meiner Spielwiese "Batch & Shell" wiedergefunden. Sind wohl in einer anderen Rubrik oder bedeckt von den Bergen anderer Bätche.. Falls ich noch den passenden Link finde, poste ich den hier - falls Du ihn vor mir findest, poste Du ihn bitte.
Aber ich bin über einen anderen Beitrag von heute gestolpert (Mehrere Dateien umbenennen).
Da wiederum wird auf ein Freewareprogramm verwiesen zum Dateien-Umbenennen (*lacht* was-es-alles-gibt-und-kopfschüttelt).
Dieser Link http://it-falke.com/software/renamefiles/de_download.php ist schon allein wegen der kreativen Schreibweisen des Wortes "umbenennen" ("Umbenennenungsaktionen", "Umbennenungsschritt") lesenswert
Biber
es gab hier im Forum schon mehrfache Ansätze zum "Batch-Umbenennen mit Zähler/laufender Nummer" oder ähnlich. Hab ich leider nicht in meiner Spielwiese "Batch & Shell" wiedergefunden. Sind wohl in einer anderen Rubrik oder bedeckt von den Bergen anderer Bätche.. Falls ich noch den passenden Link finde, poste ich den hier - falls Du ihn vor mir findest, poste Du ihn bitte.
Aber ich bin über einen anderen Beitrag von heute gestolpert (Mehrere Dateien umbenennen).
Da wiederum wird auf ein Freewareprogramm verwiesen zum Dateien-Umbenennen (*lacht* was-es-alles-gibt-und-kopfschüttelt).
Dieser Link http://it-falke.com/software/renamefiles/de_download.php ist schon allein wegen der kreativen Schreibweisen des Wortes "umbenennen" ("Umbenennenungsaktionen", "Umbennenungsschritt") lesenswert
Biber