Batch: Dateien eines Verz.Baumes sortiert nach Alter kopieren (sortiert über alle Verzeichniszweige !)
#1
geschrieben 28. November 2011 - 09:16
Ich möche aus einem Verzeichnisbaum alle Dateien kopieren, jedoch die neuesten (sortiert über ALLE! Unterverzeichnisse) zuerst.
(dir /o-d /s macht das NICHT !)
Die sortierte Liste kann ich generieren, die Batchdatei dazu auch (Excel-Makro). Jede Datei hat eine Zeile:
xxxxcopy C:\quelle\daten\datei1.abc X:\ziel\daten\datei1.abc [/switches]
Aber wie kopieren mit der Batchdatei ?
- xcopy fragt "Ist das Ziel eine Datei oder ein Verzeichnis ?", einen Schalter für Datei gibts nicht ( /c /y hilft da auch nicht)
- copy legt keine Verzeichnisse an !
- robocopy akzeptiert keine einzelnen Dateinamen als Quelle oder Ziel.
Hintergrund: Es sollen verschiedene PC's auf Strato HiDrive kopiert werden, wg. der langsamen Verbindung und den Datenmengen die neuesten Dateien sicherheitshalber zuerst.
Genial wäre natürlich eine Batch, die alles macht, auch das Sortieren über alle Verzeichnisse.
Any idea ? thx !
Anzeige
#2
geschrieben 28. November 2011 - 10:01
#3
geschrieben 28. November 2011 - 10:06
Zitat (Holger_N: 28. November 2011 - 10:01)
das ist mir schon klar ! ich will nur sicherstellen, dass das neueste ZUERST kopiert wird, und nicht die Dinge, die sowieso schon 10 Jahre da rumgammeln. Und bei 40 GB in 2 Wochen (ja, HiDrive ist selbst bei 32000er Anschluss nur mit 200kB/sec. zu erreichen !) will ich nicht den alten Müll vor den wichtigen Sachen kopieren.
Dieser Beitrag wurde von pubsfried bearbeitet: 28. November 2011 - 13:10
#4
geschrieben 28. November 2011 - 16:46
Bzw. ist das Problem seit jeher nicht da. Ich versteh immer noch nicht, was es ausmacht, was zuerst kopiert wird. Am Ende landet eh alles am Zielort.
Jedenfalls liesse sich das mit irgendeiner Powershellpipe sicher gut lösen.
Sowas wie
get-childitem -path "C:\Bla" -recurse|sort-object -property LastWriteTime|copy -destination "D:\Bla"
Dieser Beitrag wurde von Kirill bearbeitet: 28. November 2011 - 16:50
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
#5
geschrieben 29. November 2011 - 10:33
Zitat (Kirill: 28. November 2011 - 16:46)
Es geht nicht darum, Verzeichnisse abzugleichen, sondern den 1. Sync-Lauf auf ein noch leeres Verzeichnis durchzuführen. Alle späteren Abläufe kann man dann natürlich mit robocopy /mir syncen. Mag sein, dass es etwas Hysterie ist, die neueren Dateien zuerst zu synchronisieren, aber eine interessante Aufgabe ist es allemal. Und falls das Ziellaufwerk (unbeaufsichtigt) vollläuft hat man wenigstens die aktuellen Dinge gesichert.
Und das robocopy (nur) ganze Bäume snyced ist ja bei der Aufgabe gerade das Problem ! Erst (VerzA Datei_neu, Datei_alt), dann (VerzB Datei_neu, Datei_alt), es soll aber in der Reihenfolge VerzA Datei_neu, VerzB Datei_neu, VerzA Datei_alt, VerzB Datei_alt kopiert werden.
Dieser Beitrag wurde von pubsfried bearbeitet: 29. November 2011 - 10:37
#6
geschrieben 29. November 2011 - 14:33
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
#7
geschrieben 29. November 2011 - 15:35
für die neueren Dateien/Verzeichnisse ab Datum X (somit IO minimiert und neuere Files zuerst)
XCOPY [QUELLE] [ZIEL] /D: [AB-DATUM-RUTSCH-1] /E
Beispiel
xcopy C:\Ein\Verzeichniss\*.* X:\Ein\Ziel /D:11-01-2011 /E
würde alle Files kopieren welche ab den 01.11.2011 erstellt oder geändert wurden (wichtig: englische Datumsangabe beachten)
abschließend wenn der ganze "neuere" Rotz drüben ist mit Robocopy eine allgemeine Sync durchführen wie schon geschrieben.
#8
geschrieben 02. Dezember 2011 - 16:17
Zitat (Kirill: 29. November 2011 - 14:33)
Powershell kenne ich leider nicht. Besser/einfacher als VBScript ?
Zitat (Stefan_der_held: 29. November 2011 - 15:35)
für die neueren Dateien/Verzeichnisse ab Datum X (somit IO minimiert und neuere Files zuerst)
XCOPY [QUELLE] [ZIEL] /D: [AB-DATUM-RUTSCH-1] /E
Beispiel
xcopy C:\Ein\Verzeichniss\*.* X:\Ein\Ziel /D:11-01-2011 /E
würde alle Files kopieren welche ab den 01.11.2011 erstellt oder geändert wurden (wichtig: englische Datumsangabe beachten)
abschließend wenn der ganze "neuere" Rotz drüben ist mit Robocopy eine allgemeine Sync durchführen wie schon geschrieben.
Xcopy /d:xxxxx wäre natürlich eine Notlösung, daran habe ich auch schon gedacht.
Bin gerade dabei, was in VBS zu schreiben. Derzeit fehlt mir nur noch die (angepasste) Quicksort-Routine. Ich melde mich wieder, wenn "habe fertig" :-)
Erst mal DANKE an alle für Euren Input !!
#9
geschrieben 02. Dezember 2011 - 16:28
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
Das verschieben der Daten kannst du mit dem Befehl delage32.exe durchführen. ist sehr einfach zu bedienen (genau das richtige für mich *lach* Du kannst dir diese kleine Exe unter http://www.horstmuc.de/wbat32d.htm herunterladen
#10
geschrieben 06. Dezember 2011 - 12:11
Bei der Option maxage kann wahlweise ein Datum oder ein Alter in Tagen eingegeben werden.
Wird nur eine Zahl <1900 eingegeben,dann wird dies als Alter in Tagen interpretiert, darüber muss es im Datumsformat sein. Die Batch kann also ohne Änderungen täglich neu gestartet werden !
Die letzte Zeile macht dann noch en Rest (alles älter als 1899 Tage)
(MS-Text: /maxage: Excludes files with a Last Modified Date older than n days or specified date. If n is less than 1900, then n is expressed in days. Otherwise, n is a date expressed as YYYYMMDD. )
c:\x\1, c:\x\2 sind Quell- bzw. Zielverzeichnis. Eigentlich ist nur /mir notwendig für den Datenabgleich ("Mirror"), der Rest ist "schmückendes Beiwerk".
robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs /MAXAGE:1 robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs /MAXAGE:10 robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs /MAXAGE:100 robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs /MAXAGE:1000 robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs /MAXAGE:1899 robocopy c:\x\1 c:\x\2 /r:0 /w:0 /mir /w:0 /fp /np /ns /ndl /e /njh /njs
Für Newbies:
robocopy ist Teil von Windows7 (zumindest bei meinem Ultimate)! bei XP muss es noch aus einem Server-Servicepack extrahiert werden (Download von MS). Es gibt, glaube ich, auch ein Update für XP SP3. Einfach mal googlen !
Es gibt eine robocopy.doc von MS, in der alle Optionen ausführlich beschrieben sind
#11
geschrieben 13. Dezember 2011 - 01:06
Es gibt auch für Robocopy verschiedene GUI.
Wiki von robocopy beachten !!