mak-xxl
Goto Top

Batch - Textzeile an Datei anhängen

Liebe Gemeinde,

allen ein fröhliches und gesundes Jahr 2012!

Nach vielen Jahren des Mitlesens und Nachschauens hier im Forum (vielen Dank an alle!) habe ich heute ein Problem zu schildern, mit dem ich nicht vorankomme.

Also: Ich verwende die verschiedensten Batch-Scripte, um Aufgaben zu automatisieren. Da diese Scripte (fast) alle per Cron gerufen werden, habe ich mir angewöhnt, den Ausführungszeitpunkt vom Script im Script speichern zu lassen. Es wird also z.B. als letztes die folgende Zeile ausgeführt:

attrib -r %0 & echo :: Ausführung am: %date% %time% >> %0 & attrib +r %0 & exit /b 0

Selbst bei Jobs, die täglich einmal laufen, ist der Größenzuwachs nicht bedeutend, der gesehene Vorteil war das Nichtvorhandensein von extra Log-Dateien.
Nun gibt es Batch-Jobs, die zur Laufzeit eines Rechners (ca. 12-16h/d) etwa alle 5min aufgerufen werden - bei diesen stellt sich nun die Frage:
Gibt es eine Möglichkeit, eine einzelne Zeile (á la 'Letze Laufzeit ...') anzufügen und dabei die vorherige Zeile zu ersetzen|löschen|überschreiben?

Ich bin überzeugt, das Problem hatten andere auch schon, nur die Suche ergibt nichts Neues, leider.

Vielen Dank fürs Draufschauen und Eure Zeit - herzliche Grüße Mario

Content-ID: 178697

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

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

bastla
bastla 10.01.2012 um 21:14:07 Uhr
Goto Top
Hallo mak-xxl und willkommen als Mitglied!

Ich würde am ehesten die letzte Zeile anhand eines eindeutigen Begriffes (zB "Ausführung") "aussortieren" - ungetestet etwa so:
set "T=%temp%\Batch.tmp  
findstr /v "Ausführung" %0>%T%  
>>%T% echo :: Ausführung am: %date% %time%
move %T% %0 & attrib +r %0 & exit /b 0
Grüße
bastla
mak-xxl
mak-xxl 11.01.2012 um 07:52:17 Uhr
Goto Top
Guten Morgen,

vielen Dank für die Antwort - das hat schon ungetestet fast funktioniert und vor allem die Richtung aufgezeigt.
Ich hänge die geringfügig modifizierte Lösung unten an, falls jemand mal so etwas brauchen kann.
Die Änderungen betrafen Zeile 2, der Schalter '/b' zwingt findstr zum Lesen ab Zeilenbeginn, sonst passt das Muster auch auf diese und die nächste Zeile - sie werden dann nicht mit umkopiert.
In der vierten Zeile ist noch ein 'attrib -r %0' notwendig, sonst generiert der move-Befehl eine Abfrage.

set "T=%temp%\Batch.tmp"  
findstr /b /v ":: Letzte Ausführung" %0>%T%  
>>%T% echo :: Letzte Ausführung am: %date% %time%
attrib -r %0 & move %T% %0 & attrib +r %0 & exit /b 0

:: Letzte Ausführung am: 11.01.2012  7:40:40,29

Vielen Dank an bastla, das Forum und alle, die sich Zeit genommen haben - Frohes Schaffen weiterhin! Mario

Zusatz:

Die Aussage "der Schalter '/b' zwingt findstr zum Lesen ab Zeilenbeginn" muss besser heißen: "der Schalter '/b' zwingt findstr zum Vergleichen ab Zeilenbeginn".
Außerdem wurde der Schalter '/c' zugefügt (genauer Stringvergleich), sonst werden alle mit '::' beginnenden Zeilen gefunden, und das sind in einem Batch-Script u. U. so einige ...
Falls mehrere Scripte zeitgleich laufen, sei noch an 'set "T=%temp%\%~n0.tmp"' gedacht.

So, nochmals Dank - Mario
bastla
bastla 11.01.2012 um 09:24:40 Uhr
Goto Top
Hallo mak-xxl!

Wenn Du ":: Letzte Ausführung" als Suchbegriff verwendest, wäre, wegen des Leerzeichens, auch noch die Option "/c:" zu verwenden - es werden ansonsten alle mit "::" oder mit "Letzte" oder mit "Ausführung" beginnenden Zeilen gesucht (und eliminiert) ...

Grüße
bastla
mak-xxl
mak-xxl 11.01.2012 um 10:54:17 Uhr
Goto Top
Hallo bastla!

Das kommt davon, wenn man einen Beitrag so langsam schreibt wie ich (zwischendurch in den Formatierungsrichtlinien geblättert) - dann sind die anderen wieder fixer.
Die Auskommentierung vor 'Letzte Ausführung ...' ist zur Sicherheit eingebaut, falls das Script mal über sein Ende rennt - dt. Umlaute richten in anderen Environments manchmal wüste Dinge an ...

Nochmals ein herzliches Dankeschön für die Hilfe - Mario