64572
Goto Top

Ordnersynchronisation mit Batch

Automatisches Kopieren und Löschen in Bezug auf Quellordner

Hallo zusammen!

Ich möchte mir ein Backup-Skript bauen, welches die Dateien von meinem Desktop und Laptop synchronisiert. Also, wenn am Desktop was geändert wurde, wird das auch am Laptop geändert, und andersherum!

Alle Dateien kopieren ist dank ycopy kein Problem; das kommt erst auf, wenn es darum geht Dateien zu löschen!

Ein Beispiel: Ich habe Ordner für zu bearbeitende Fotos und fertige. Wenn ich jetzt Bilder fertig bearbeitet habe, werden diese vom "zu bearbeiten" in den "fertig" Ordner verschoben. Wenn ich xcopy drüber laufen lasse, erstellt er mir zwar unter "fertig" den Ordner mit den bearbeiteten Bilder, jedoch bleibt der Ordner unter "zu bearbeiten" bestehen!

Ich suche also eine Routine mit der ich Ordner bzw. Dateien vergleichen kann und, falls es im Zielordner überschüssige Ordner/Dateien gibt, diese zu löschen!

Ich hoffe es ist verständlich und nicht zu kompliziert geschildert!

Danke im Voraus...

Admirandis

Content-Key: 86388

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

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

Mitglied: 6741
6741 Apr 25, 2008 at 09:41:09 (UTC)
Goto Top
mssync

geht 100% und kostenlos ....
Member: miniversum
miniversum Apr 25, 2008 at 11:03:36 (UTC)
Goto Top
Und per Batch gehts so:
@echo off

set src=F:\Quelle
set dst=F:\Ziel
if %src:~-1%==\ set src=%src:~0,-1%
xcopy "%src%" "%dst%" /c /s /e /r /v /d /y /i /h /f /o /x  

for %%L in (d e f g h i j k l m n o p q r s t u v w x y z) do if not exist %%L:\NUL set LWdst=%%L:
Subst %LWdst% "%dst%"  
for /R %LWdst%\ %%i in ("*.*") do @FC "%%i" "%src%%%~pnxi" >nul || del /s /q "%%i"  
Subst %LWdst% /D
Vorausgesetzt wird ein freier Laufwerksbuchstabe.
Mitglied: 64572
64572 Apr 25, 2008 at 14:34:20 (UTC)
Goto Top
Also ich werd mir eure sachen mal zu Gemüte führe face-wink

Ich meld mich, falls es noch Probleme geben sollte!

Auf jeden Fall schonmal danke für eure Hilfe!
Mitglied: 64572
64572 Apr 27, 2008 at 12:10:40 (UTC)
Goto Top
Also hab mir jetzt mal den Batch angeschaut. Funktioniert auch bis auf die Tatsache, dass die Ordner bestehen bleiben. Es werden also nur die Dateien in den Ordnern gelöscht. Ich schau mal, ob ichs noch hinbring!
Member: miniversum
miniversum Apr 27, 2008 at 14:40:06 (UTC)
Goto Top
Das
del /s /q "%%i"
sollte eigentlich Verzeichnisse und Dateien löschen.
Ist vielleicht ein Schreibschutz oder so drauf?
Zur Not kannst du die Option /F noch dazuhängen.
Member: Biber
Biber Apr 27, 2008 at 14:44:04 (UTC)
Goto Top
Moin admirandis,

wenn Du die Ziel-Verzeichnisse löschen willst, die im Quellverzeichnis nicht mehr vorhanden sind, könntest Du miniversums Starategie nochmal anwenden.
Unter dem vorhandenen Schnipsel:
 ...
REM Runde 1 war: ersetze Dest-Dir durch Laufwerksbuchstaben, wackele durch alle Unterverzeichisse und prüfe Dateien
Subst %LWdst% "%dst%"  
for /R %LWdst%\ %%i in ("*.*") do @FC "%%i" "%src%%%~pnxi" >nul || del /s /q "%%i"  
REM Runde 2: wackele durch alle Unterverzeichisse und prüfe,  ob Verzeichnis (noch) in Src existiert
FOR /R "LWdst%\" %%i in (.) do if not exist "%src%\%%~pnxi" do echo Rd "%%~fi"  
Subst %LWdst% /D
[Ungetestete Skizze, "echo" nach dem Testen weglassen]

Anmerkung 1: Wenn tatsächlich der Fall eintritt, dass Du eine Verzeichnis-Hierarchie auf %src% entsorgt hast,
also eine Struktur "test\sub1\subsub2" komplett gelöscht hast, dann wird es nicht funktionieren.
Wenn es sich nur um eine Unterverzeichnisebene handelt schon.

Anmerkung 2: Auch wenn sich eine Sync-Mimik grundsätzlich mit Bordmitteln nachbilden lassen lässt:
ich würde dafür Tools verwenden, die darauf spezialisiert sind (s.o.).

Grüße
Biber
[Edit] @miniversum: Mit [for /R %LWdst%\ %%i in ("*.*") ...] erwischt Du nur Dateien, keine Verzeichnisse [/Edit]
Mitglied: 64572
64572 Apr 27, 2008 at 18:47:11 (UTC)
Goto Top
Werd wahrscheinlich zu nem Tool greifen, wenn ich es jetzt nicht mehr hinbekommen... Aber evtl find ich ja noch ne Methode für alles... Mal schauen!

So nebenbei: Eigtl sollte der "del" Befehl auch Verzeichnisse löschen!

/S Löscht alle Verzeichnisse und Dateien im angegebenen Verzeichnis
zusätzlich zu dem Verzeichnis selbst. Wird verwendet, um ganze
Verzeichnisbäume zu löschen.

(Auszug aus del /?). Komisch, dass es nicht klappt...
Member: bastla
bastla Apr 27, 2008 at 21:01:34 (UTC)
Goto Top
Hallo admirandis!

Auch nebenbei: Deinen "Auszug aus del /?" bekomme ich (unter XP SP2) eigentlich für "rd /?" angezeigt ...

Grüße
bastla
Member: Biber
Biber Apr 27, 2008 at 21:49:18 (UTC)
Goto Top
Moin admirandis,

noch nebenbeier:
Ob nun DEL oder RD aufgerufen ist relativ egal, weil mit dem bisherigen Konstrukt "...for /R %LWdst%\ %%i in ("*.*") do .." nur Dateien, aber keine Verzeichnisse erfasst werden. Und wenn rechts der DO-Anweisung nix ankommt, ist es im Ergebnis dasselbe, ob Du auf nix ein RD oder ein DEL anwendest.

Um Verzeichnisse abzuklappern habe ich oben eine zweite FOR /R-Anweisung ergänzt, was evtl. etwas untergegangen ist.

Grüße
Biber
Mitglied: 64572
64572 Apr 27, 2008 at 22:17:20 (UTC)
Goto Top
@bastla: Hast Recht! Fehler meinerseits! Sorry! face-wink

@Biber: Hab jetzt deinen Code mal reingebastelt! Hab das auch schon mit der FOR-Schleife beachtet. Aber wie du schon in deinem letzten Beitrag erwähnt hast, klappt das nicht mit ganze Ordnerstrukturen.
Eine seeehr unschöne Möglichkeit wäre die 2. FOR-Schleife einfach paar mal durchlaufen zu lassen, weil in dieser immer nur das unterste Verzeichnis gelöscht wird. Was aber nicht wirklich schön ist.

Ich bin nicht so der Batch-Pro, aber gibt es hier evtl auch sowas wie eine repeat-until-Schleife (wie z.B. in Pascal)?
Das wäre zwar auch nicht die schönste Lösung, aber es würde zumindest sauber laufen...

Grüße
Admirandis
Member: miniversum
miniversum Apr 28, 2008 at 16:15:55 (UTC)
Goto Top
Ich hab mir mal erlaubt den Biber-Batch etwas umzubauen. Vielleicht hilfts ja:
rem Ersetze Dest-Dir durch Laufwerksbuchstaben, wackele durch alle Unterverzeichisse und prüfe Dateien und Verzeichnisse. Existiert was nicht nim an es ist eine datei und lösche sie. Gibts nen Fehler beim Löschen nim an es ist ein Verzeichnis und lösche es.
Subst %LWdst% "%dst%"
Subst %LWdst% /D

(Die ECHOs nach 'nem erfolgreichen Test entfernen)
Mitglied: 64572
64572 May 03, 2008 at 07:51:49 (UTC)
Goto Top
Hallo zusammen!

Nachdem ich jetzt noch länger rumprobiert hab und nichts dabei rausgekommen ist, habe ich zum Tool "Robocopy" gegriffen. Damit geht alles auch noch schön in einer Batch datei und es gibt wunderbar viele Optionen zum einstellen. Kann ich jedem nur wärmstens empfehlen!

An dieser Stelle möchte ich nochmal allen Beteililgten für ihre Hilfe danken!

Gruß
Admirandis