admin-lif
Goto Top

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

Content-Key: 17239

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

Printed on: April 16, 2024 at 08:04 o'clock

Member: Biber
Biber Oct 05, 2005 at 17:34:02 (UTC)
Goto Top
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
Member: admin-lif
admin-lif Oct 06, 2005 at 06:11:08 (UTC)
Goto Top
Moin Frank,

erstmal Danke funktioniert alles soweit ganz gut, die neueste Datei wird aufgerufen. Jetzt hab ich nur noch ein Problem:

Die aktuellste Datei (newestlog) wird geöffnet, anstatt wie ich es wollte per e-mail verschickt zu werden.
Member: Biber
Biber Oct 06, 2005 at 08:42:17 (UTC)
Goto Top
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
Member: admin-lif
admin-lif Oct 06, 2005 at 08:52:52 (UTC)
Goto Top
for /f %%i in ('dir /oD /b \\...\...\...\...\backup*.log') do @set newestlog=%%i


"\\...\...\mailsend.exe" "mailserver" "Administrator@.....de" "user@.....de" "Datensicherung server" "Datensicherung server ist abgeschlossen. Details siehe Log-Datei. Gruss admin-lif"\\...\...\...\%newestlog%"
Member: Biber
Biber Oct 06, 2005 at 10:17:26 (UTC)
Goto Top
> ....Datei. Gruss admin-lif"\\...\...\...\%newestlog%"

IMHO scheint da ein Leerzeichen und vor allem ein Anfü-Zeichen zu fehlen, oder?
.....Datei. Gruss admin-lif" "\\...\...\...\%newestlog%"

Aber ist nur eine ganz vage Vermutung... bin ja kein Programmierer *lacht

Und nu is Mittach...

Gruß Biber
Member: admin-lif
admin-lif Oct 06, 2005 at 10:22:27 (UTC)
Goto Top
Es funktioniert jetzt, DANKE
Member: Biber
Biber Oct 06, 2005 at 11:05:52 (UTC)
Goto Top
Dafür nich'...

wie wir bei uns in Bremen sagen..
Member: admin-lif
admin-lif Oct 11, 2005 at 06:54:40 (UTC)
Goto Top
Hi,

mir ist noch was eingefallen was ich ergänzen möchte, und zwar:

ich möchte nur, dass das neuste log-file gemailt wird, wenn darin der text "erfolgreich" enthalten ist...

weiß jemand ne lösung???
Member: Biber
Biber Oct 11, 2005 at 08:19:32 (UTC)
Goto Top
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. face-wink
Grüße
Biber
Member: admin-lif
admin-lif Oct 12, 2005 at 12:01:05 (UTC)
Goto Top
Hallo Biber,

hat alles prima geklappt, DANKE
Member: Biber
Biber Oct 12, 2005 at 12:09:51 (UTC)
Goto Top
Freut mich und have a nice day!
Member: admin-lif
admin-lif Oct 12, 2005 at 12:45:46 (UTC)
Goto Top
muss noch mal nerven, folgendes:

mein skript schaut nun so aus:

for /f %%i in ('dir /oD /b \\...\...\...\...\....txt') do @set newestlog=%%i


Type "\\...\...\...\...\%newestlog%"|Find /i "Auftragsabschlußstatus: Erfolgreich" >nul
IF Errorlevel 1 goto :eof
::Errorlevel 1 = String nicht gefunden, also auch nicht mailen


"\\...\...\mailsend.exe" "mailserver" "Administrator@...de" "user@....de" "Datensicherung erfolgreich" "Datensicherung ist erfolgreich abgeschlossen. Details siehe Log-Datei. Gruss admin-lif" "\\...\...\...\%newestlog%"


diese Befehlsreihe, ist in meiner batch-Datei mehrmals vorhanden, da es ja um verschiedene Sicherungen geht. Wenn nun der erste server nicht erfolgreich gesichert hat, arbeitet das skript den befehl für die darauffolgenden server nicht mehr ab.
Member: Biber
Biber Oct 12, 2005 at 13:06:23 (UTC)
Goto Top
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! face-wink Auch nicht in Bätchen.

Ist viel zu fehlerträchtig und nicht wartbar. Also von daher off limits für Admins.
[/Edit]
Member: admin-lif
admin-lif Oct 24, 2005 at 05:50:53 (UTC)
Goto Top
funktioniert der befehl

"for /f %%i in ('dir /oD /b \\...\...\...\...\....txt') do @set newestlog=%%i"

auch irgendwie ohne "for-schleife"?
Member: Biber
Biber Oct 24, 2005 at 11:09:15 (UTC)
Goto Top
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.
>echo %Date%
Mo 24.10.2005
>dir *.log |find "%date:~-10%"  
24.10.2005  12:54                    1227 Backup07.log
Ü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
attrib %newestlog% -A
nach dem Mailen... dann ist die neu angelegte BackupYY.Log die einzige, die gefunden wird bei
Dir /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
Member: admin-lif
admin-lif Oct 24, 2005 at 12:17:41 (UTC)
Goto Top
Hallo,

ich weiß jetzt wie ich das ganze angehe, jetzt müsste ich bloß noch wissen wie man alle dateien in einem ordner mit fortlaufender nummer umbenennt.

da muss ich doch irgendwie ne variable angeben und diese dann definieren

???
Member: Biber
Biber Oct 24, 2005, updated at Oct 17, 2012 at 14:07:11 (UTC)
Goto Top
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 face-wink

Biber
Member: admin-lif
admin-lif Oct 25, 2005 at 13:21:15 (UTC)
Goto Top
Mein Skript schaut folgendermaßen aus, und ich will das ganze ohne for-schleife machen, hab aber keine ahnung wie???


copy "\\srv001\Programme\Backup\log*.txt" "\\backupserver\log\srv001"

copy "\\srv002\Programme\Backup\log*.txt" "\\backupserver\log\srv002"


for /f %%i in ('dir /oD /b \\backupserver\log\srv001\log*.txt') do @set newestlog=%%i


Type "\\backupserver\log\srv001\%newestlog%"|Find /i "Auftragsabschlußstatus: Erfolgreich" >nul
IF Errorlevel 1 goto :marke 1
::Errorlevel 1 = String nicht gefunden, also auch nicht mailen


"\\server003\mailsend.exe" "mailserver" "Administrator@test.de" "user@test.de" "Datensicherung srv001 erfolgreich" "Datensicherung srv001 ist erfolgreich abgeschlossen. Details siehe Log-Datei. Gruss admin" "\\backupserver\log\srv001\%newestlog%"


:marke 1
for /f %%i in ('dir /oD /b \\backupserver\log\srv002\log*.txt') do @set newestlog=%%i


Type "\\backupserver\log\srv002\%newestlog%"|Find /i "Auftragsabschlußstatus: Erfolgreich" >nul
IF Errorlevel 1 goto :marke 1
::Errorlevel 1 = String nicht gefunden, also auch nicht mailen


"\\server003\mailsend.exe" "mailserver" "Administrator@test.de" "user@test.de" "Datensicherung srv002 erfolgreich" "Datensicherung srv002 ist erfolgreich abgeschlossen. Details siehe Log-Datei. Gruss admin" "\\backupserver\log\srv002\%newestlog%"