haegar75
Goto Top

Geänderte Dateien per dir in Datei und fc ermitteln

Hallo Leute,
ich muss euch mal wieder belästigen..
Ich möchte Dateien die sich seit der letzten Datensicherung geändert haben packen und wegkopieren.
Da sich die bereits gepackten und wegkopierten schlecht mit den unkomprimierten vergleichen lassen, hatte ich folgenden Ansatz gewählt..
Mit dir die Dateinamen in Datei umleiten und dann mit fc die am Tag vorher erstellte datei vergleichen und aus den Unterschieden die zu kopierenden Dateien ermitteln.
Versuch:

dir *.dbx | SORT /r | FIND /v "Volumeseriennummer:" | FIND /v "Verzeichnis" | FIND /v "Datei(en)" | FIND /v "Laufwerk" > copy.txt
fc copyalt.txt copy.txt

Leider werden mir wenn sich eine Datei ändert aber auch die vorherige und die nachfolgende angezeigt, obwohl die gleich sind... Ausserdem weiß ich noch net wie ich aus dem Wust an Datum und Größe den Dateinamen extrahieren kann..

Content-Key: 96820

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

Printed on: April 26, 2024 at 20:04 o'clock

Member: Biber
Biber Sep 12, 2008 at 16:46:08 (UTC)
Goto Top
Hmmja, Haegar75,

bei aller Liebe zu Batch-Lösungen... lass uns bitte noch ein paar Zeilen bei der Backup-Strategie verweilen...

So, wie sich das End-Wunsch-Ergebnis darstellen müsste, erzeugst Du doch täglich eine Delta-Sicherung (alle heute geänderten Dateien) und dieses Delta speicherst Du als eine ZIP oder RAR-Datei weg.

Wäre es da nicht simpler und wartbarer, jeden gatesverdammten Tag per Taskplaner einen Batchjob anzustoßen, der alle Dateien mit heutigen Datum im ...\src-Verzeichnis zusammensammelt und in eine (heut z.B.) 2008-09-12.zip schreibt?
Oder welches bisher geplante Feature würde dann fehlen?

Grüße
Biber
Member: Haegar75
Haegar75 Sep 12, 2008 at 16:55:17 (UTC)
Goto Top
Nunja, das mache ich ja im Prinzip auch mit den "kleinen" Dateien (inkrementelles Backup mit Xcopy)
Den oben beschriebenen Eiertanz wollte ich mir nur mit den mehreren hundert MB großen Brocken abhalten, da der Platz auf dem Sicherungslaufwerk begrenzt ist..
Das sei zu meiner Verteidigung zu sagen.. face-wink
Member: Biber
Biber Sep 12, 2008 at 17:40:58 (UTC)
Goto Top
...in diesem Fall würde ich dann eher den Weg gehen, mit ZWEI komplettsicherungs-ZIPs zu arbeiten.

In der ersten Komplett-ZIP-Datei (die für Mo, Mi, Fr) lässt Du dein ZIP-Programm jeweils alle src-Files aktualisieren, die verglichen mit dem letzten Stand im Archiv neuer sind; in der anderen Zip-Datei (die für Mo und Mi) machst Du dasselbe Spielchen.
Somit hast Du immer die Daten von heute( im Src-Verzeichnis), den Vortags-Stand und den von vorgestern( oder älter).

Oder du nimmst nur ein Komplett-Archiv als zip und machst die Zwei-Dalta-Mimik nur mit Dateien, die sich im letzten Monat geändert haben.

Vorteil der ersten Lösung wäre: du kannst (solltest Du mal in Deinem Src-Ordner richtig was verkantet haben) immer noch per Knopfdruck auf einen in sich konsistenten Stand/zusammenpassende Dateien zurück.

Aus einem SRC-Ordner eine einzelne Datei aus einer Delta-Sicherung zurückzukopieren... hmmm..... kann klappen, muss aber nicht.

Aber ich wäre auch bereit, meine Einwände zurückzustellen, wenn Du auf Deinem Konzept bestehst... face-wink

Grüße
biber
Member: Haegar75
Haegar75 Sep 12, 2008 at 18:06:39 (UTC)
Goto Top
Naja, was heißt drauf bestehen.. Meine Einsichtigkeit wird eigentlich nur noch von meiner Bescheidenheit übertroffen! face-wink
Deine Einwände hab ich noch nicht ganz verstanden.. Was ich vorhabe ist ja eigentlich keine wirkliche Delta-Sicherung.. Die dbxe die ich sichern will (hatte mich eben vertan mit src..) kann ich ja nur als Ganzes anpacken. Ich möchte halt nur die Brocken austauschen die sich geändert haben.
Member: bastla
bastla Sep 12, 2008 at 20:50:10 (UTC)
Goto Top
Hallo Haegar75 und Biber!

Unabhängig von den weiteren Überlegungen als Antwort auf die eigentliche Fragestellung: Als Ersatz der "fc"-Zeile sollte
Z:\>for /f "delims=" %%i in (D:\copy.txt) do findstr /x /c:"%%i" D:\copyalt.txt>nul || for /f "tokens=3*" %%a in ("%%i") do echo %%b  
die unterschiedlichen Dateien ausfiltern.

Grüße
bastla
Member: Haegar75
Haegar75 Sep 13, 2008 at 19:17:41 (UTC)
Goto Top
Funktioniert akkurat! Danke!!! Was macht das "token=3*" eigentlich?
Member: bastla
bastla Sep 13, 2008 at 20:46:11 (UTC)
Goto Top
Hallo Haegar75!

Was macht das "token=3*" eigentlich?
Damit wird festgelegt, welche Teile der Zeile interessieren bzw den Schleifenvariablen (hier ab %%a) zugeordnet werden - so wird zB die Zeile
12.09.2008  22:40             2.542 copyalt.txt
anhand der defaultmäßigen (daher auch keine Angabe von "delims=") Trennzeichen "Tab" und "Leerzeichen" in die Teile
1:    12.09.2008
2:    22:40
3:    2.542
Rest: copyalt.txt
zerlegt.

Eigentlich benötigt wird zwar der Teil 4, aber, um für den Fall, dass der Dateinamen ein oder mehrere Leerzeichen enthalten könnte (wodurch auch noch die Teile 5, 6, etc entstünden), vorzusorgen, wird der Rest der Zeile durch die Angabe von "*" zu einem einzigen "token" (%%b) zusammengefasst.

Grüße
bastla