Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Synchronisation einer Ordnerstruktur

Mitglied: Inbase

Inbase (Level 1) - Jetzt verbinden

01.08.2006, aktualisiert 13.08.2006, 7097 Aufrufe, 14 Kommentare

Hallo,
ich habe folgendes Patch-Programm zur Synchronisation einer
Ordnerstruktur auf zwei unterschiedlichen Laufwerken geschrieben:

set Quelle="C:\Testverzeichnis"
set Ziel="D:\Testverzeichnis"
set Logdatei="D:\logdatei.txt"
echo %date% %time% >> %logdatei%
xcopy %Quelle% %Ziel% /v /f /d /s /e /r /y /z /i >> %Logdatei%
echo. >> %logdatei%

Die Patchdatei wird im Autostart-Ordner täglich ausgeführt und
dokumentiert in der Logdatei die synchronisierten Dateien.
Das funktioniert wunderbar, hat aber einen Nachteil:
Gelöschte Dateien in %Quelle% werden in %Ziel% nicht gelöscht,
also die Ordnerstruktur wird nicht richtig synchronisiert.
Wie kann ich dies mit zusätzlichen Batchbefehlen erreichen?

Gruß
Inbase
Mitglied: Supaman
01.08.2006 um 22:26 Uhr
gar nicht. für solche funktionen brauchst du eine software, die solche unterschiede anhand einer datenbank feststellen kann und dann die entsprechenden aktionen (löschen oder ins archiv verschieben) durchführt.

gute syncsoftware: http://www.tgrmn.com/
Bitte warten ..
Mitglied: Inbase
02.08.2006 um 21:43 Uhr
habe das Problem mit "robocopy" aus dem Windows "Server 2003 Resource Kit Tools"
lösen können
Danke
Inbase
Bitte warten ..
Mitglied: Biber
03.08.2006 um 19:07 Uhr
Moin Inbase, moin Supaman,

die Aussage "geht mit Batch nicht" kann ich natürlich nicht so stehenlassen, dafür habt ihr bestimmt Verständnis

Wenn als Hilfsmittel nur XCopy zur Verfügung stünde (also weder RoboCopy noch ein Sync-Tool installiert ist), dann wäre meine Strategie wie folgt [ungetestete Skizze]...
01.
-------- snipp SyncMitXCopy.bat
02.
@echo off & setlocal
03.
set Quelle="C:\Testverzeichnis"
04.
set Ziel="D:\Testverzeichnis"
05.
set Logdatei="D:\logdatei.txt"
06.
Set "xcopyParms=/v /f /d /s /e /r /y /z /i"
07.
echo %date% %time% >> %logdatei%
08.
xcopy %Quelle% %Ziel% %xcopyParms%>> %Logdatei%
09.
echo. >> %logdatei%
10.
::rem Im Anschluss eine Liste [/L] aller Dateien, die NUR in QUELLE vorhanden sind [/U] erzeugen
11.
XCopy %Ziel% %Quelle% /L /U >%temp%\OnlyInTarget.Lst
12.
:: Diese Liste Datei für Datei abarbeiten...alle Dateien, die NUR in ZIEL vorhanden sind, löschen
13.
FOR /F "delims=" %%i in (%temp%\OnlyInTarget.Lst) do DEL /y "%%i">nul
14.
::-----snapp SyncMitXCopy.bat [ungetestete Skizze] ----------
Diese zwei Zeilen mehr tun doch nicht weiter weh...

Gruß
Biber
P.S. @Supaman
Sollte aber nur eine Anmerkung sein; natürlich spricht nichts gegen ein Sync-Tool oder auch gegen "RoboCopy /MIR".
P.P.S. @Inbase
Bitte einen Beitrag auch dann auf "Gelöst" setzen, wenn Du selbst eine Lösung gefunden hast. Danke.
Bitte warten ..
Mitglied: miniversum
04.08.2006 um 10:26 Uhr
so gehts etwas besser:

@echo off & setlocal
set Quelle="E:\quelle"
set Ziel="E:\ziel"
set Logdatei="logdatei.txt"
Set "xcopyParms=/v /f /d /s /e /r /y /z /i"
:: Eine Liste [/L] aller Dateien, die NUR in QUELLE vorhanden sind erzeugen
XCopy %Ziel% %Quelle% /L /v /d /s /e /r /y /z /i >%temp%/OnlyInTarget.Lst
:: Diese Liste Datei für Datei abarbeiten...alle Dateien, die NUR in ZIEL vorhanden sind, löschen
FOR /F "delims=" %%i in (%temp%/OnlyInTarget.Lst) do DEL "%%i"
:: Jetzt die Dateien die von Quelle nach Ziel kopieren
echo %date% %time% >> %logdatei%
xcopy %Quelle% %Ziel% %xcopyParms%>> %Logdatei%
echo. >> %logdatei%

miniversum

edit: noch 'n fehler gefunden...
Bitte warten ..
Mitglied: Biber
04.08.2006 um 10:29 Uhr
Thx, miniversum,
hatte den %xcopyparms%-Parameter vergessen.
Eigentlich sollte man/frau ja Code auch erst testen und dann posten, aber....

Schönes Wochenende
Biber
Bitte warten ..
Mitglied: miniversum
04.08.2006 um 13:12 Uhr
Bitte.
So ganz perfekt ists aber auch nicht.
Aber vielleicht macht wer anders ja dran weiter und dann wirds ein ganz toller Batch.

miniversum
Bitte warten ..
Mitglied: miniversum
05.08.2006 um 20:20 Uhr
So weils mir keine Ruhe lies... was funktuionierendes...

01.
@echo off & setlocal
02.

03.
set Quelle="E:\quelle"
04.
set Ziel="E:\ziel"
05.

06.
:: Quelle und Ziel als Laufwerke einbinden
07.
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 LWdelquelle=%%L:
08.
if %LWdelquelle.==. (
09.
  echo.
10.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
11.
  goto eof
12.
)
13.
if (%Quelle:~2,1%)==(:) subst %LWdelquelle% %Quelle% > NUL
14.
if (%Quelle:~2,1%)==(\) net use %LWdelQuelle% %Quelle% > NUL
15.

16.
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 LWdelZiel=%%L:
17.
if %LWdelZiel.==. (
18.
  echo.
19.
  echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe. 
20.
  goto eof
21.
)
22.
if (%Ziel:~2,1%)==(:) subst %LWdelZiel% %Ziel% > NUL
23.
if (%Ziel:~2,1%)==(\) net use %LWdelZiel% %Ziel% > NUL
24.

25.

26.
:: Eine Liste alles Dateien und Verzeichnisse im Ziel erzeugen
27.
:: Danach alle Dateien und Verzeichnisse die nicht in der Quelle vorhanden sind löschen
28.
dir /s /b /ad %LWdelZiel% >%temp%\OnlyInTarget.Lst
29.
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a\NUL RD /Q /S "%LWdelZiel%%%a"
30.
dir /s /b /a-d %LWdelZiel% >%temp%\OnlyInTarget.Lst
31.
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a del /Q /S "%LWdelZiel%%%a"
32.

33.

34.
:: Laufwerksbuchstaben für Quelle und Ziel entfernen
35.
subst %LWdelquelle% /D > NUL
36.
net use %LWdelquelle% /Delete > NUL
37.
subst %LWdelZiel% /D > NUL
38.
net use %LWdelquelle% /Delete > NUL
39.

40.

41.
:: Jetzt die Dateien die von Quelle nach Ziel kopieren
42.
xcopy %Quelle% %Ziel% /v /f /d /s /e /r /y /z /i
miniversum
Bitte warten ..
Mitglied: RamboJay
10.08.2006 um 13:01 Uhr
HI
warum so kompliziert??
Ich würde es entweder mit Robocopy oder Beyond Compare lösen.
Beide können Berichte erzeugen und Netzwerkpfade benutzen (\\server\pfad....)

Bei fragen zu den meld dich einfach.
Bitte warten ..
Mitglied: Biber
10.08.2006 um 13:20 Uhr
@Jason
warum so kompliziert??
Weil es übt....

War doch mehr eine hypothetische Frage (s.o), weil irgendwer geschrieben hatte, "das geht mit Batch nicht..."

Dass es nicht nötig gewesen wäre, dieses Rad noch mal zu erfinden - keine Frage.
Aber hilf- und lehrreich ist es allemal.

Ich finde miniversums Skizze 5 Sterne wert.

Gruß
Biber
Bitte warten ..
Mitglied: miniversum
13.08.2006 um 16:50 Uhr
Danke Biber

miniversum
Bitte warten ..
Mitglied: Beeman
07.01.2009 um 12:31 Uhr
Hi miniversum,

dein Batch funktioniert einwandfrei (auch von mir 5 Sterne dafür), allerdings verstehe ich nicht wieso Du am Ende die Laufwerke über subst abmeldest und dann versuchst sie über net use wieder anzusprechen? Habe den Befehlszeilen ein rem vorgestellt und es funktioniert ohne Fehlermeldung. Lass ich die Zeilen als Befehl drin, bekomme ich eine Fehlermeldung! Oder habe ich da irgendwas übersehen / missverstanden?


:: Laufwerksbuchstaben für Quelle und Ziel entfernen
subst %LWdelquelle% /D > NUL
rem net use %LWdelquelle% /Delete > NUL
subst %LWdelZiel% /D > NUL
rem net use %LWdelquelle% /Delete > NUL



Gruß Beeman
Bitte warten ..
Mitglied: miniversum
07.01.2009 um 13:46 Uhr
Diese vier Zeilen sind zusammen mit den Zeilen 13,14 und 22,23 zu sehen (ich hab oben mal die Code Formatierung vorgenommen die ich damals anscheinend vergessen hatte).
GANZ korrekt müssten die Zeilen 35 bis 38 auch folgendermaßen lauten:
01.
if (%Quelle:~2,1%)==(:) subst %LWdelquelle% /D > NUL
02.
if (%Quelle:~2,1%)==(\) net use %LWdelquelle% /Delete > NUL
03.
if (%Ziel:~2,1%)==(:) subst %LWdelZiel% /D > NUL
04.
if (%Ziel:~2,1%)==(\) net use %LWdelquelle% /Delete > NUL
Die Funktion dieser Konstruktion ist folgende:
Es werden erst Quell- und Zielverzeichnis als eigene Laufwerksbuchstaben eingebunden. Danach verglichen und gelöscht was zu viel ist und anschließend die Laufwerksbuchstaben wieder freigegeben.
Ist nun das Quell- bzw. Zielverzeichnis ein lokales Verzeichnis wird es über den Subst Befehl mit einem eigenen Laufwerksbuchstaben belegt. Ist allerdings das Quell- bzw. Zielverzeichnis ein Netzlaufwerk ist dafür der net use Befehl notwendig. Um diese Unterscheidung zu machen ist die If Abfrage drin. Hier wird kontrolliert ob das zweite Zeichen der Pfadangebe ein : oder ein \ ist. Diese Unterscheidung sollte eigentlich auch beim freigeben der Laufwerksbuchstaben gemacht werden.
Ich habe das allerdings vernachlässigt da es die Funktion nicht beeinträchtigt.
Wäre ein lokales Verzeichnis angegeben worden würde der Laufwerksbuchstabe mit subst wieder freigegeben werden. Würde danach der net use Befehl diesen Laufwerksbuchstaben noch einmal freigeben wollen käme zwar eine Fehlermeldung, die Ausführung würde allerdings nicht scheitern.
Wäre umgekehrt ein Netzlaufwerk angegeben worden würde der subst Befehl zum freigeben fehlschlagen und eine Fehlermeldung wäre zu sehen. Der net use Befehl würde allerdings ausgeführt werden und der Ablauf würde wieder funktionieren.
Wenn Du also sagst das du nie Netzlaufwerke syncronisieren willst sondern immer nur lokale Verzeichnisse kannst du alle net use Befehle entfernen / auskommentieren. Wenn dich die Fehlermeldung beim freigeben der Laufwerke stört (zwei werden so auf jeden Fall zu sehen sein sonst) kannst du das umgehen indem du die Abfrage wie oben im Code dort einbaust.
Bitte warten ..
Mitglied: Beeman
12.01.2009 um 10:08 Uhr
Hi miniversum,

wow, bin echt begeistert. Ein riesiges DANKE für deine schnelle und vor allem ausführliche Antwort. So konnte ich das ganze nicht nur umsetzen, sondern auch ein bißchen besser verstehen.

Gruß Beeman
Bitte warten ..
Mitglied: miniversum
12.01.2009 um 18:05 Uhr
Wenn Du noch Fragen hast frag ruhig.
Die Batch macht im Prinzip genau das was man händisch tun würde.
1. Vergleichen der Verzeichnisse und löschen der Dateien und Unterordner im Ziel die in er Quelle nicht existieren. (Das Einbinden als Laufwerke mit Subst bzw. net use ist notwendig für diesen Vergleich.)
2. Kopieren der dateien von der Quelle ins Ziel die im Ziel nciht existieren oder älter sind als die in der Quelle. (das macht das xcopy mit dem /d Parameter.
Bitte warten ..
Ähnliche Inhalte
Cloud-Dienste
Inbox Ordnerstruktur
Frage von YanmaiCloud-Dienste1 Kommentar

Hallo ihr Administratoren, ich benutze seit längerem die Google Inbox als Postfach. Damit bin ich bis jetzt sehr zufrieden, ...

Rechtliche Fragen
Vernatwortlichkeit Ordnerstruktur
gelöst Frage von PeterzRechtliche Fragen5 Kommentare

Ich habe eine Frage zur Dateiablage innerhalb einer Firma. In der Regel werden jegliche Daten in einer Ordnerstruktur auf ...

Windows Server
NTFS Berechtigungen Ordnerstruktur
gelöst Frage von hukahu23489Windows Server11 Kommentare

Hallo, ich bin seit kurzem in einer neuen IT-Abteilung und bin über das Berechtigungskonzept des Unternehmens sehr schockiert. Ich ...

Windows Server
Neuer DC + Ordnerstruktur
gelöst Frage von KMUlifeWindows Server13 Kommentare

Hallo zusammen! In meinem KMU-Netzwerk haben wir eine zu überarbeitende Ordnerstruktur, da diese wie bei so vielen KMU's mit ...

Neue Wissensbeiträge
Internet

CDU Propaganda: Urheberschutz im Internet - Ende des digitalen Wild-West

Information von Frank vor 15 StundenInternet3 Kommentare

Hallo Administratoren, aus einem Kommentar heraus habe ich folgenden Beiträge von Herr Sven Schulze und Axel Voss (beide CDU ...

Router & Routing

Zyxel VMG 1312 B30A - Firmwareupdate nur im "privaten" Firefox Modus möglich

Tipp von the-buccaneer vor 1 TagRouter & Routing2 Kommentare

Hatte hier ein Zyxel 1312 das ums verrecken kein Firmwareupdate durchführen wollte. Datei ist auswählbar, dann kommt der Fortschrittskreisel ...

Windows 7

Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019

Information von kgborn vor 2 TagenWindows 75 Kommentare

Kleine Info für die Admins der oben genannten Maschinen. Ab Juli 2019 werden Updates von Microsoft nur noch mit ...

Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 4 TagenFirewall2 Kommentare

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Heiß diskutierte Inhalte
Hardware
IT-Werkzeugkoffer bis 50,- EUR
gelöst Frage von departure69Hardware53 Kommentare

Hallo. Ich bin als IT-Systembetreuer einer Gemeinde zusätzlich auch der IT-Systembetreuer einer Grund- und Hauptschule. Dort muß ich jedoch ...

Netzwerke
Verteilung von Programmdaten außerhalb des internen Netzwerkes
Frage von mertaufmbergNetzwerke27 Kommentare

Guten Morgen liebe Administratoren, ich versuche zurzeit eine möglichst sichere und einfache Lösung zu suchen, um ein Programmverzeichnis über ...

Datenbanken
PHP Fatal error: Uncaught Error: Call to undefined function oci connect
Frage von PlanitecXDatenbanken19 Kommentare

Hallo Zusammen, ich sitze seit Tagen am Problem das ich keine PHP Anwendung mit Anbindung zu Oracle zum laufen ...

Hardware
PC im Selbstbau, Workstation, mittelklasse Gaming
gelöst Frage von MrRobot1997Hardware19 Kommentare

Hallöchen Leute, ich bin seit einigen Jahren leider nicht mehr wirklich im Bild, wenn es um die Hardware und ...