
64572
25.04.2008, aktualisiert am 03.05.2008 um 09:51:49 Uhr
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 86388
Url: https://administrator.de/forum/ordnersynchronisation-mit-batch-86388.html
Ausgedruckt am: 22.04.2025 um 03:04 Uhr
12 Kommentare
Neuester Kommentar

mssync
geht 100% und kostenlos ....
geht 100% und kostenlos ....
Und per Batch gehts so:
Vorausgesetzt wird ein freier Laufwerksbuchstabe.
@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
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:
[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]
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
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]
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
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
Ich hab mir mal erlaubt den Biber-Batch etwas umzubauen. Vielleicht hilfts ja:
(Die ECHOs nach 'nem erfolgreichen Test entfernen)
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
Subst %LWdst% "%dst%"
(Die ECHOs nach 'nem erfolgreichen Test entfernen)