c0d3.r3d
Goto Top

Robocopy - Nur geänderte o.neue Dateien mit Datumstruktur

Hallo!

Ich habe mich bereits mehrere Stunden durch das Internet gekämpft und nicht wirklich etwas praktikables gefunden. Ich suche eine Möglichkeit um bei Robocopy geänderte oder neue Dateien in einen Ordner mit der Variable "%datum%" zu kopieren.

Mein Skript sieht momentan so aus:
@echo off
set datum=%date%
set source01="\\SERVER-01\Daten$"  
set target01="D:\Backups\%datum%"  
set logfile="D:\Backups\logs\robocopy_log_%datum%.txt"  
robocopy %source01% /A /S %target01% -a /s /e /XD /XO "\\SERVER-01\Daten$\WSUS" /COPY:DAT /LOG:%logfile%  
echo Sicherung abgeschlossen!

shutdown.exe /s-



Wenn ich jedoch nun Beispielsweise eine Datei vom 28.06.2018 habe, so landet diese bei der Sicherung in dem Ordner am selben Tag im Ordner "28.06.2018". Führe ich die Sicherung jedoch heute, am 29.06.2018 aus, so landet die Datei jedoch auch im Ornder "29.06.2018", obwohl sie seit dem 28.06.2018 nicht mehr bearbeitet worden ist. Das Skript soll jedoch so funktionieren, dass nur neu erstelle oder geänderte Dateien in den Ordner mit dem Datum an dem Sie erstellt/geändert worden sind, und nicht noch die Altlast von mehreren Tagen zuvor mit kopieren.

Habe ich einen Denkfehler in meinem Skript, oder ein Parameter vergessen? Ich kenne mich mit Skripten leider nicht so aus, es währe schön wenn jemand weiß wie es funktioniert das Skript vollständig funktionsfähig in einen Code zu kopieren.

LG

Content-Key: 378648

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

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

Member: emeriks
emeriks Jun 29, 2018 updated at 18:00:30 (UTC)
Goto Top
Hi,
das kannst Du mit Robocopy so nicht umsetzen.
set datum=%date%
... liefert immer jenes Datum, an welchem diese Batch ausgeführt wird. Da gibt es überhaupt keine Relation zum Datum der zu kopierenden Dateien.

Sowas würde ich mit PowerShell umsetzen.

Aber: Warum willst Du das denn so machen? Welchen Sinn soll das haben? Etwa ein Versionierung der Dateien?

E.
Member: c0d3.r3d
c0d3.r3d Jun 29, 2018 at 18:16:32 (UTC)
Goto Top
Hallo,

genau, eine Versionierung von Dateien, um auch auf ältere Versionen von Dateien zugreifen zu können. Wie würdest du das mit PowerShell umsetzen? Habe leider keine gute Skript Kenntnisse. :/

LG
Member: BassFishFox
BassFishFox Jun 29, 2018 at 21:47:36 (UTC)
Goto Top
Hallo,

Das was die Optionen /MAXAGE /MINAGE /MAXLAD /MINLAD von Robocopy bieten reicht nicht?

BFF
Member: erikro
erikro Jun 30, 2018 at 08:44:30 (UTC)
Goto Top
Moin,

ich würde da auch die Powershell bemühen. Da gibt es z. B. beim Dateiobjekt die Eigenschaft LastWriteTime, nach der sich einfach filtern lässt, um die Dateien in den richtigen Ordner zu plazieren. Unter der Kommandozeile wird Dir nichts anderes übrig bleiben, als mit dir Dir die Information bei jeder einzelnen zu holen, das Datum aus dem String auszulesen und so die Datei in den Ordner zu praktizieren. Wie das geht, steht hier.

https://it-stack.de/02/10/2009/dateidatum-per-batch-auslesen/

hth

Erik
Member: c0d3.r3d
c0d3.r3d Jun 30, 2018 at 09:36:26 (UTC)
Goto Top
Hallo,

danke erstmal für eure beiden Lösungsvorschläge. Ich kenne mich mit der Materie der Skripts leider so überhaupt nicht aus. Wie und wo müsste ich denn bei robocopy die Befehle hinzufügen bzw. ergänzen? Ich hab mir dazu einen Wikiartikel angesehen, allerdings werde ich nicht ganz schlau, da das Backup Einmal täglich, ungefähr zur selben Zeit (+/- 5 Minuten) durchgeführt wird und wirklich nur neue oder geänderte Dateien kopieren soll.

Die Sache mit der PowerShell wäre sicherlich die beste, allerdings blicke ich durch die Seite überhaupt nicht durch. Allerdings muss das Skript auch mit PowerShel 2.0 von Windows 7 (32-Bit) funktionieren, da dies momentan das Backup-Betriebssystem ist und es in den nächsten Jahren nicht so aussieht, als würde es ersetzt, da dieser PC nur Intranet und keinen Internetzugang hat und durch die Firewall beschützt wird und somit auch noch nach dem Ablauf des Supports von Win 7 einwandfrei betrieben werden kann. Ein Upgrade auf Windows 10 oder ein anderes System ist ebenfalls nicht vorgesehen.

Grüße
Member: erikro
erikro Jun 30, 2018 updated at 09:58:02 (UTC)
Goto Top
Moin,

wenn Du anfängst zu lernen, dann vergiss die Commandshell und lerne gleich Powershell.

<edit2>Die Powershell kannst Du unter Win7 aktualisieren. Bei MS steht, wie das geht. Einfach mal danach googeln.</edit2>

<edit>Der hat nur den ersten Satz gesichert. Also nochmal

Wenn Ihr täglich ein Backup macht, dann ist doch alles ok. Die Dateien, die am 29ten geändert wurden, landenim Ordner vom 28ten, auch wenn das Erstelldatum der 28te ist.

BTW: Ich hoffe, das ist nicht das ganze Backupkonzept.

Liebe Grüße

Erik</edit>
Member: c0d3.r3d
c0d3.r3d Jun 30, 2018 at 11:35:46 (UTC)
Goto Top
Hallo,

Nein das Backup Konzept ist etwas anders. Dateien die am Bps. 28. erstellt werden, landen im Ordner vom 28. Wird die Datei jedoch am 29. bearbeitet, soll die Originaldatei im Ordner von 28 bleiben, jedoch auch im Ordner vom 29. landen. Und das ist momentan mein Problem dies umzusetzen, da mir die nötige Kompetenz in der Materie fehlt und ich das ganze nicht wirklich verstehe wie es funktioniert in der Praxis im Skript. Theoretisch weiß ich wie es funktionieren soll, aber Praktisch kann ich es nicht umsetzen..

Grüße

PS: Hätte vielleicht jemand die Möglichkeit der weiß wie es funktioniert mir ein solches Skript zu basteln, ich verstehe leider nur Bahnhof...
Member: BassFishFox
BassFishFox Jun 30, 2018 at 13:18:55 (UTC)
Goto Top
Hallo,

Wie und wo müsste ich denn bei robocopy die Befehle hinzufügen bzw. ergänzen?

Word-Dateien von M: nach X: kopieren, die maximal 1 Tag alt sind.
robocopy "M:\" "X:\" *.docx /copyall /maxage:1  

Fuer Beispiele wie man Robocopy einsetzt gibt es genuegend Seiten. Eine davon ist diese hier:
https://social.technet.microsoft.com/wiki/contents/articles/1073.robocop ...

Schau Dir da mal #7 an.

Weiterhin findest Du auch hier bei Administrator.de viele Loesungen zu robocopy. Einer davon ist dieser.
Neueste Dateien Per Batch kopieren
Member: emeriks
emeriks Jul 02, 2018 updated at 06:26:06 (UTC)
Goto Top
Zitat von @BassFishFox:
Word-Dateien von M: nach X: kopieren, die maximal 1 Tag alt sind.
Aufpassen, dieser Vorschlag ist u.U. "gefährlich". Technisch sicherlich korrekt.
Wenn man mal 2 Tage lang nicht kopiert, dann gehen einem die Änderungen von >1 Tag (um beim Bsp. zu bleiben) damit verloren. So, wie ich Backup verstehe, ergibt sich eine relevante Änderung nicht aus dem Dateidatum sondern aus dem Vergleich, welchen Stand ich bereits im Backup habe und welchen nicht.

@c0d3.r3d
Wenn Du Dich von der Zielsetzung verabschiedest, dass Änderungen vom Tag X im Ordner "Änderungen vom Tag X" landen sollen, und statt dessen besser nimmst, dass Änderungen im Ordner "Tag der Kopie" landen, dann kannst Du einfach nach dem A-Attribut kopieren und dieses anschließend löschen. Dieses Verfahren ist uralt und funktioniert solange, wie der kopierende Benutzer die Dateiattribute der Quelldateien ändern darf. Aber wenn Du das mit Robocopy machst, dann musst Du hier den "/M" Parameter nehmen und nicht "/A".
Member: c0d3.r3d
c0d3.r3d Jul 08, 2018 at 13:00:31 (UTC)
Goto Top
Hallo!

Danke für eure Hilfe und zahlreichen Ideen. Mittlerweile habe ich eine Möglichkeit mit der Software "ArecaBackup" gefunden, welche mir das ganze so erstellt, wie ich es haben möchte.

LG