northon
Goto Top

Batch - Ältestes Logfile Wegsichern

Guten Tag allerseits!

Ich habe folgende Problemstellung:

NTBackup legt immer die Logfiles der letzten 10 Tage ab und löscht alle älteren. Nun möchte ich mir per Patch immer den ältesten wegkopieren, bevor er gelöscht wird.

Mein Problem ist, dass ich nur sehr beschränktes Wissen ob des Batch habe und nun mehr oder weniger oer radnom rumprobiere und zu keinem Ergebnis komme.

@echo off
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%a%%b%%c%%d
cd C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\WindowsNT\NTBackup\data
Echo D | xcopy test.txt LogFiles_alt\Sicherung%CDATE%.txt
for %%f in ("C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\WindowsNT\NTBackup\data*.txt") do echo %%~tf

Ich kann mir eine hardgecodete test.txt jeden tag wegsichern und die for-Schleife darunter teilt mir die Änderungsdaten der Dateien mit.
Ich komme jedoch nicht dahinter, wie ich dem Batch nun sagen soll er solle die älteste .txt File wegsichern.

Es wäre mir eine Freude wenn mir jmd helfen könnte,

Vielen Dank im Vorraus,
mit freundlichen Grüßen

Northon

Content-Key: 93649

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

Printed on: April 23, 2024 at 09:04 o'clock

Member: bastla
bastla Aug 05, 2008 at 11:32:45 (UTC)
Goto Top
Hallo Northon!

Ungetestet etwa so:
@echo off & setlocal
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%a%%b%%c%%d  
cd /d "C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Anwendungsdaten\Microsoft\WindowsNT\NTBackup\data"  
for /f "delims=" %%i in ('dir *.txt /b /a-d /o-d') do set "Oldest=%%i"  
copy "%Oldest%" LogFiles_alt\Sicherung%CDATE%.txt  
Grüße
bastla

[Edit] Pfad angepasst [/Edit]
Member: northon
northon Aug 05, 2008 at 12:12:29 (UTC)
Goto Top
Danke für deine schnelle Antwort!

um es auf meinem Desktop testen zu können, habe ich einen LogFiles_alt Ordner und ein paar .txt Dateien erstellt und gestartet, doch bekomme ich dann einen Syntax-Error zurück.

Hier der Code:

@echo off & setlocal
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%a%%b%%c%%d
cd /d "C:\Dokumente und Einstellungen\akerber\Desktop"
for /f "delims=" %%i in ('dir *.txt /b /a-d /o-d') do set "Oldest=%%i"
copy "%Oldest%" LogFiles_alt\Sicherung%CDATE%.txt

Mit freundlichen Grüßen
Northon
Member: bastla
bastla Aug 05, 2008 at 12:22:21 (UTC)
Goto Top
Hallo Northon!

bekomme ich dann einen Syntax-Error zurück.
Kann ich nicht nachvollziehen.

Ersetze bitte (zum Testen) "echo off" durch "echo on" und starte von der Kommandozeile oder füge als letzte Zeile noch "pause" hinzu - dann kannst Du Dir den Ablauf genau ansehen.

Grüße
bastla

P.S.: Das Datum würde ich eher mit "%%c%%b%%a" festlegen (zumindest unter XP/2003/Vista).

P.P.S.: Ein Batch ist leichter lesbar, wenn er beim Posten unter < code>/< /code>-Tags (ohne Leerzeichen face-wink) gesetzt wird.
Member: northon
northon Aug 05, 2008 at 12:37:24 (UTC)
Goto Top
Hallo Bastla!

Danke für dienen -Tipp face-smile Werds in Zukunft verwenden. Hab den von dir beschriebenen Test durchgeführt und häng dir nen Screenshot an:

http://img228.imageshack.us/img228/8684/batchya2.png

Danke für deine Hilfe!

Mit freundlichen Grüßen
Northon
Member: bastla
bastla Aug 05, 2008 at 12:46:53 (UTC)
Goto Top
Hallo Northon!

häng dir nen Screenshot an.
Geht auch einfacher: Nach einem Klick auf das Systemmenüfeld (linke obere Ecke) des CMD-Fensters kannst Du in den Eigenschaften den"QuickEdit-Modus" (am besten gleich für alle Fenster) einschalten und danach mit der Maus Text markieren und per rechter Maustaste kopieren (bzw, wenn nichts markiert ist, einfügen).
Das Problem ist das Leerzeichen hinter dem Datum (und vor ".txt") - lässt sich durch Setzen von Anführungszeichen vermeiden:
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set "CDATE=%%a%%b%%c%%d"  
Grüße
bastla
Member: northon
northon Aug 05, 2008 at 13:03:07 (UTC)
Goto Top
Hehe danke für den Quick Edit-Modus. Es freut mich, dass es immer noch Leute gibt, die sich nicht nur die Mühe machen ein Problem zu lösen, sondern auch noch hilfreiche Infos Rund um das Thema geben. Ein Dank und großes Lob an dich von meiner Seite face-smile

Habe nun die Anführungszeichen gesetzt, nur nehm ich damit anscheinend einen wichtigen Parameter aus dem Spiel genommen, denn nun kopiert er mir immer die neueste Datei anstatt der ältesten face-smile

Es ist sicher ein dummer Fehler, aber bitte kläre mich noch darüber auf.

Nach der ganzen Geschichte ist einmal dringend ein ausführliches Batch Tutorial nötig....wenn man doch nur einmal Zeit dafür hätte.

Mit freundlichen Grüßen
Northon

@echo on & setlocal
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set "CDATE=%%a%%b%%c%%d"   
cd /d "C:\Dokumente und Einstellungen\akerber\Desktop"   
for /f "delims=" %%i in ('"dir *.txt" /b /a-d /o-d') do set "Oldest=%%i"   
copy "%Oldest%" LogFiles_alt\Sicherung%CDATE%.txt  

[EDIT]Der Effekt ist der gleiche wenn ich die Anführungszeichen beim "dir *.txt" ganz wegnehme.[/EDIT]
Member: bastla
bastla Aug 05, 2008 at 13:15:47 (UTC)
Goto Top
Hallo Northon!

Das Setzen der Anführungszeichen bezog sich nur auf die gepostete Zeile für das Erstellen der Datumsvariable %CDATE% (da diese ohne Anführungszeichen am Ende ein Leerzeichen enthält) - daher die Anführungszeichen um das "dir" entfernen (oder zumindest nur um "*.txt" setzen).

Grüße
bastla
Member: northon
northon Aug 05, 2008 at 13:50:39 (UTC)
Goto Top
Wie oben beschrieben: wenn ich die Anführungszeichen beim .txt weglasse, ändert es nichts daran, dass die neueste und nicht die älteste Datei kopiert wird.

Ich habe dir nochmals den "log" kopiert:

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

Z:\>c:\copy.bat

Z:\>FOR /F "tokens=1,2,3,4,5 delims=/. " %a in ('date/T') do set "CDATE=%a%b%c%d
"

Z:\>set "CDATE=05082008"

Z:\>cd /d "C:\Dokumente und Einstellungen\akerber\Desktop"

C:\Dokumente und Einstellungen\akerber\Desktop>for /F "delims=" %i in ('dir *.tx
t /b /a-d /o-d') do set "Oldest=%i"

C:\Dokumente und Einstellungen\akerber\Desktop>set "Oldest=zweiter.txt"

C:\Dokumente und Einstellungen\akerber\Desktop>set "Oldest=erster.txt"

C:\Dokumente und Einstellungen\akerber\Desktop>copy "erster.txt" LogFiles_alt\Si
cherung05082008.txt
1 Datei(en) kopiert.

die datei erster.txt wurde zuerst und die datei zweiter.txt als zweite erstellt mit einem Abstand>1min.

Geht das Batchfile vielleicht nur auf tageslange Abstände?

Mfg Northon
Member: bastla
bastla Aug 05, 2008 at 16:02:21 (UTC)
Goto Top
Hallo Northon!

die datei erster.txt wurde zuerst und die datei zweiter.txt als zweite erstellt mit einem Abstand>1min.
... dann wäre "erster.txt" die älteste Datei und sollte kopiert werden, was ...
C:\Dokumente und Einstellungen\akerber\Desktop>copy "erster.txt" LogFiles_alt\Si
cherung05082008.txt
1 Datei(en) kopiert.
... auch zu klappen scheint ...

Nur als Ergänzung: Zugrundegelegt wird nicht das Erstellungsdatum, sondern das Datum der letzten Änderung, und eine Kontrolle mit
dir /o-d "C:\Dokumente und Einstellungen\akerber\Desktop\*.txt"  
sollte zeigen, dass die Datei mit dem frühesten Änderungsdatum als letzte aufgelistet (und daher im Batch verwendet) wird. Verantwortlich für diese Reihenfolge ist das "-" in "/o-d" - mehr dazu mit "dir /?".

Grüße
bastla
Member: northon
northon Aug 06, 2008 at 06:36:29 (UTC)
Goto Top
Siehst du, da sieht man vor lauter passierten Fehler nicht einmal mehr wenns funktioniert...langsam werd ich Paranoid face-smile

Vielen Dank für eine ausführliche und gute Hilfe! Ich geh jetzt ein Batch Tutorial lesen...

Mit freundlichen Grüßen
Northon