Dateien per Kommandozeile verschieben

Hatemachine

Cadet 4th Year
Registriert
Juli 2003
Beiträge
78
Hi,

bräuchte mal Eure Hilfe...

Ich würde gerne per Batchdatei ältere Logfiles in einen Ordner verschieben. Nun zum Haken an der Sache. Manche Dateien werden täglich aktualisiert, manche aber nicht. Nun soll dieses Batchfile eben nur Dateien verschieben, welche mindestens 30 Tage unverändert im Quell-Ordner liegen.

Bsp.:

xx001.log 10Tage alt
xx002.log 30Tage alt
xx003.log 19Tage alt
xx004.log 30Tage alt

Nun soll per Script nur xx002.log und xx004.log verschoben werden...

Wäre super, wenn mir jemand weiterhelfen könnte.
 
Dazu hab ich zwei Fragen:
Wieviele logs befinden sich durchschnittlich in dem Ordner und gibt es auch Unterordner?
 
Also ich bin das Gedanklich gerade durchgegangen und bin zu der Erkenntnis gekommen das es über die Kommandozeile kaum möglich ist. Da gibt es einige Probleme:
.
  • Es gibt kein vernünftiges Kommandozeilentool das die Zeit einer Datei ausgeben kann.
  • Man könnte es mit dem Befehl DIR machen und die Ausgabe an FOR weitergeben und jeden einzelnen Wert mit IF+%DATE% vergleichen, allerdings stellt sich hier das Problem dass das Datum durch "." getrennt ist und somit den Befehl IF ... /LSS nicht zulässig ist. (Wenn du nicht mitkommst das ist egal, ich hoffe das jemand mitliest und weiss was ich meine :D vielleicht kommen wir so auch zu einer Lösung ;) )
  • Vom Aktuellen wert %DATE% muss man 30 Tage abziehen

Dabei gibt es sicher noch so manch andere Dinge die Schwierigkeiten bereiten könnten. Sehr einfach wäre es allerdings wenn die Logfiles nach änderung eine höhere oder niedrigere Zahl bekommen würden...
 
Hallo Hatemachine (klasse Nick :) ),

hier kannst du am besten Robocopy verwenden, ist ein Tool von MS welches in den Ressource Kit Tools 2003 enthalten ist.

Mit den 78 (!) Parametern kannst du sehr genau einstellen, was kopiert werden soll.

Die Vorgabe "nur seit 30 Tagen unveränderte verschieben" ist mit dem Schalter /MAXLAD:30 realisierbar.

Die Tools gibts hier

Viel Spaß beim Rumprobieren, robocopy hat insgesamt 78 Schalter, die man natürlich auch kombinieren kann. :D

my2cents

PCB

@eraz: ist durchaus möglich, alles kein Thema :cool_alt:
 
@ PCB

Vielen Dank für den Tipp, verwende eh Robocopy, um die Dateien von Server a nach b zu kopieren...hatte mir nur nicht alle Optionen angeschaut. :freak:
 
Ja ne is klar, ich poste lang und breit Probleme und du kommst einfach daher und postest ein Kommandozeilentool dass das von Haus aus schon kann! :mad: :D :D
PCB schrieb:
@eraz: ist durchaus möglich, alles kein Thema :cool_alt:
Geht bestimmt, nur der Zeitaufwand wär mir einfach zu hoch... Aber mach einfach mal! :D
 
@[-eraz-]: Ich musste auch erst mal kurz überlegen, Robocopy ist halt das Schweizer Messer der Kopiertools. :)

Deine Überlegungen waren halt zu kompliziert, aber nicht böse sein ! ;)

Ich weiß doch das du auch ein klasse Windows-Kenner bist !

PCB

BTW: die Maxlad-Option schließt die Dateien aus, nicht ein. Da muss man dann ein bisschen tricksen, halt erst das ganze Verz. mit dieser Option in ein temp-Verz. verschieben, die übrigen aus dem altem Ordner sind dann die, die seit 30 Tagen nicht verändert wurden. Nachher die norm. Files halt wieder in das Ursprungs-Verz. zurückschieben.
Ist etwas tricky, aber man muss es ja nur 1mal machen, danach kann man es als gepl. Task automatisch laufen lassen.
 
Zuletzt bearbeitet:
@ PCB

Eigentlich ist es gar nicht so Tricky...hab mir die ganzen Optionen noch mal angesehen.
Anstatt MAXLAD hab' ich die "MINAGE n" Option verwendet, diese kopiert nur Dateien, welche mindestens n Tage alt sind.

Nachdem die Logfiles nun im Zielordner gelandet sind, werden sie mittels 7-Zip gepackt und danach die Logdateien aus dem Ordner gelöscht.

Code:
rem -------------------------------- Kopieren von neuen Logdateien ------------------------------

robocopy %quelle% %ziel%

rem ------------------------------ Archivieren von alten Logdateien -----------------------------

robocopy %ziel% /mov /minage:"30" %archiv%
7za a -o: "%archiv%\log.zip" %archiv%\*.log
del %archiv%\*.log

Daran hab' ich gestern ewig rumgerätselt, nur um rauszufinden, dass das Problem mit simplen 3 Zeilen zu lösen ist... :D
 
Zuletzt bearbeitet:
Zurück
Oben