WinFuture-Forum.de: Batch: Dateien eines Verz.Baumes sortiert nach Alter kopieren - WinFuture-Forum.de

Zum Inhalt wechseln

Alle Informationen zum Thema Windows 7 in unserem Special. Windows 7 Download, FAQ und neue Funktionen im Überblick.
Seite 1 von 1

Batch: Dateien eines Verz.Baumes sortiert nach Alter kopieren (sortiert über alle Verzeichniszweige !)


#1 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 28. November 2011 - 09:16

Hört sich einfach an, ist es aber nicht:
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 !
0

Anzeige



#2 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.170
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 28. November 2011 - 10:01

Ich glaube, du hast da eine falsche Vorstellung vom Sortieren. Das Sortieren ändert nicht die Reihenfolge der Speicherorte und hat da auch gar keinen Einfluß auf die Dateien selbst. Das ist nur eine Einstellung des Dateimanagers in welcher Reihenfolge Dateien angezeigt werden.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#3 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 28. November 2011 - 10:06

Beitrag anzeigenZitat (Holger_N: 28. November 2011 - 10:01)

Ich glaube, du hast da eine falsche Vorstellung vom Sortieren. Das Sortieren ändert nicht die Reihenfolge der Speicherorte und hat da auch gar keinen Einfluß auf die Dateien selbst. Das ist nur eine Einstellung des Dateimanagers in welcher Reihenfolge Dateien angezeigt werden.

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

0

#4 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 28. November 2011 - 16:46

Nimm einfach robocopy mit dem Parameter /mir, der kopiert nur das, was da eben nicht schon rumgammelt, sondern nur das, was auch neu ist. Das kopiert den Verzeichnisbaum, übrigens, du musst also keine einzelnen Dateien angeben.

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

Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#5 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 29. November 2011 - 10:33

Beitrag anzeigenZitat (Kirill: 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.


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

0

#6 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 29. November 2011 - 14:33

Für akademische Zwecke sieht man das noch ein ;) Hast du das mal mit der Powershell probiert?
Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#7 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.343
  • Beigetreten: 08. April 06
  • Reputation: 888
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 29. November 2011 - 15:35

ich würds einfach auf zwei Schritte aufteilen:

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.
0

#8 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 02. Dezember 2011 - 16:17

Beitrag anzeigenZitat (Kirill: 29. November 2011 - 14:33)

Für akademische Zwecke sieht man das noch ein ;) Hast du das mal mit der Powershell probiert?

Powershell kenne ich leider nicht. Besser/einfacher als VBScript ?

Beitrag anzeigenZitat (Stefan_der_held: 29. November 2011 - 15:35)

ich würds einfach auf zwei Schritte aufteilen:

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 !!
0

#9 Mitglied ist offline   ohn 

  • Gruppe: aktive Mitglieder
  • Beiträge: 60
  • Beigetreten: 21. März 07
  • Reputation: 0

geschrieben 02. Dezember 2011 - 16:28

Das Datum kannst du dir schön mit folgendem skript setzen lassen.

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
0

#10 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 06. Dezember 2011 - 12:11

OK, hab mal ne einfache Lösung geschaffen mit ROBOCOPY /maxage:
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
0

#11 Mitglied ist offline   pubsfried 

  • Gruppe: aktive Mitglieder
  • Beiträge: 40
  • Beigetreten: 01. November 10
  • Reputation: 1

geschrieben 13. Dezember 2011 - 01:06

Richcopy ist übrigens der GUI-Nachfolger von robocopy.
Es gibt auch für Robocopy verschiedene GUI.
Wiki von robocopy beachten !!
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0