Verzeichnisse Vergleichen Skript
Moinz @Batchler!
Vorweg kurz die Sinn-Erläuterung: Ich möchte, dass ein Verzeichnis auf meiner Platte in regelmässigen, kurzen Abständen mit einem identischen Verzeichnis auf einer anderen Platte synchronisiert wird.
Sync-Tool hab ich schon einige probiert, aber keines hat mit überzeugt. Das eine stürzt ständig ab, das andere braucht für die 700MB fast 'ne Stunde und das wieder nächste ist mir einfach zu teuer, um nur ein Verzeichnis zu sync'en...
Ich hab mir als Grundlage die "QuickNDirtySync" vom Biber genommen.
@Biber: Ich hoffe du bist nicht böse über mein Plagiat!
Jetzt habe ich drei Probleme, die ich nicht zu lösen vermag:
1. Es wird kein Log angelegt. Das Verzeichnis "C:\Backup-Logs" ist vorhanden.
2. In der Rückwärtssuche zum Dateien löschen bekomme ich die Fehlermeldung
3. Das Skript arbeitet nicht rekursiv durch die Unterverzeichnisse!
Gibt's dazu evtl. auch 'ne Q'n'D - Lösung?
Oder sollte ich auf VB ausweichen (wovon ich leider überhaubt keine Ahnung habe)?
Oder sollte ich mir doch 'ne SyncSoft kaufen? Wenn ja, welche würdet ihr empfehlen?
So, ich glaub, ich hab alles gepostet, was mir auf der Seele brennt...
Thx, Fugu
Vorweg kurz die Sinn-Erläuterung: Ich möchte, dass ein Verzeichnis auf meiner Platte in regelmässigen, kurzen Abständen mit einem identischen Verzeichnis auf einer anderen Platte synchronisiert wird.
Sync-Tool hab ich schon einige probiert, aber keines hat mit überzeugt. Das eine stürzt ständig ab, das andere braucht für die 700MB fast 'ne Stunde und das wieder nächste ist mir einfach zu teuer, um nur ein Verzeichnis zu sync'en...
Ich hab mir als Grundlage die "QuickNDirtySync" vom Biber genommen.
@Biber: Ich hoffe du bist nicht böse über mein Plagiat!
@echo off
set src=D:\Auslagerungsdateien
set dst=E:\Auslagerungsdateien
set log=C:\Backup-Logs\%date%.log
for %%i in ("%src%\*.*") do (
if not exist "%dst%\%%~nxi" (
xcopy %src%\%%~nxi %dst%\%%~nxi /i /c /e /q /y || echo Kopiere neue Datei %src%\%%~nxi.>%log%
) else (
fc "%%i" "%dst%\%%~nxi">nul || xcopy %src%\%%~nxi %dst%\%%~nxi /i /c /e /q /y || echo Kopiere erneuerte Datei %src%\%%~nxi.>%log%
)
)
for %%i in ("%dst%\*.*") do (
if not exit "%src%\%%~nxi" (
del /s /q %%i || echo Alte Datei %dst%\%%i entfernt.>%log%
)
)
Jetzt habe ich drei Probleme, die ich nicht zu lösen vermag:
1. Es wird kein Log angelegt. Das Verzeichnis "C:\Backup-Logs" ist vorhanden.
2. In der Rückwärtssuche zum Dateien löschen bekomme ich die Fehlermeldung
""D:\Auslagerungsdateien\%~nxi"" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Gibt's dazu evtl. auch 'ne Q'n'D - Lösung?
Oder sollte ich auf VB ausweichen (wovon ich leider überhaubt keine Ahnung habe)?
Oder sollte ich mir doch 'ne SyncSoft kaufen? Wenn ja, welche würdet ihr empfehlen?
So, ich glaub, ich hab alles gepostet, was mir auf der Seele brennt...
Thx, Fugu
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 41844
Url: https://administrator.de/forum/verzeichnisse-vergleichen-skript-41844.html
Ausgedruckt am: 14.01.2025 um 12:01 Uhr
8 Kommentare
Neuester Kommentar
Ist zwar was anderes aber gehts so?
@echo off & setlocal
set Quelle="E:\quelle"
set Ziel="E:\ziel"
:: Quelle und Ziel als Laufwerke einbinden
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:
if %LWdelquelle.==. (
echo.
echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.
goto eof
)
if (%Quelle:~2,1%)==( subst %LWdelquelle% %Quelle% > NUL
if (%Quelle:~2,1%)==(\) net use %LWdelQuelle% %Quelle% > NUL
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:
if %LWdelZiel.==. (
echo.
echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.
goto eof
)
if (%Ziel:~2,1%)==( subst %LWdelZiel% %Ziel% > NUL
if (%Ziel:~2,1%)==(\) net use %LWdelZiel% %Ziel% > NUL
:: Eine Liste alles Dateien und Verzeichnisse im Ziel erzeugen
:: Danach alle Dateien und Verzeichnisse die nicht in der Quelle vorhanden sind löschen
dir /s /b /ad %LWdelZiel% >%temp%\OnlyInTarget.Lst
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a\NUL RD /Q /S "%LWdelZiel%%%a"
dir /s /b /a-d %LWdelZiel% >%temp%\OnlyInTarget.Lst
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a del /Q /S "%LWdelZiel%%%a"
:: Laufwerksbuchstaben für Quelle und Ziel entfernen
subst %LWdelquelle% /D > NUL
net use %LWdelquelle% /Delete > NUL
subst %LWdelZiel% /D > NUL
net use %LWdelquelle% /Delete > NUL
:: Jetzt die Dateien die von Quelle nach Ziel kopieren
xcopy %Quelle% %Ziel% /v /f /d /s /e /r /y /z /i
das log fehlt noch, solte aber kein problem sein.
miniversum
@echo off & setlocal
set Quelle="E:\quelle"
set Ziel="E:\ziel"
:: Quelle und Ziel als Laufwerke einbinden
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:
if %LWdelquelle.==. (
echo.
echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.
goto eof
)
if (%Quelle:~2,1%)==( subst %LWdelquelle% %Quelle% > NUL
if (%Quelle:~2,1%)==(\) net use %LWdelQuelle% %Quelle% > NUL
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:
if %LWdelZiel.==. (
echo.
echo FEHLER: Auf Ihrem System existiert kein freier Laufwerksbuchstabe.
goto eof
)
if (%Ziel:~2,1%)==( subst %LWdelZiel% %Ziel% > NUL
if (%Ziel:~2,1%)==(\) net use %LWdelZiel% %Ziel% > NUL
:: Eine Liste alles Dateien und Verzeichnisse im Ziel erzeugen
:: Danach alle Dateien und Verzeichnisse die nicht in der Quelle vorhanden sind löschen
dir /s /b /ad %LWdelZiel% >%temp%\OnlyInTarget.Lst
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a\NUL RD /Q /S "%LWdelZiel%%%a"
dir /s /b /a-d %LWdelZiel% >%temp%\OnlyInTarget.Lst
for /F "delims=: tokens=2" %%a in (%temp%\OnlyInTarget.Lst) do if NOT exist %LWdelQuelle%\%%a del /Q /S "%LWdelZiel%%%a"
:: Laufwerksbuchstaben für Quelle und Ziel entfernen
subst %LWdelquelle% /D > NUL
net use %LWdelquelle% /Delete > NUL
subst %LWdelZiel% /D > NUL
net use %LWdelquelle% /Delete > NUL
:: Jetzt die Dateien die von Quelle nach Ziel kopieren
xcopy %Quelle% %Ziel% /v /f /d /s /e /r /y /z /i
das log fehlt noch, solte aber kein problem sein.
miniversum
Hallo Fugu!
Vielleicht wäre XXCOPY etwas für diesen Zweck - siehe zB http://www.xxcopy.com/xxcopy27.htm#tag_231 und http://www.xxcopy.com/xxcopy27.htm#tag_13.
HTH
bastla
Vielleicht wäre XXCOPY etwas für diesen Zweck - siehe zB http://www.xxcopy.com/xxcopy27.htm#tag_231 und http://www.xxcopy.com/xxcopy27.htm#tag_13.
HTH
bastla
Jetzt habe ich drei Probleme, die ich nicht
zu lösen vermag:
1. Es wird kein Log angelegt. Das
Verzeichnis "C:\Backup-Logs" ist
vorhanden.
2. In der Rückwärtssuche zum
Dateien löschen bekomme ich die
Fehlermeldung
3. Das Skript arbeitet nicht rekursiv durch
die Unterverzeichnisse!
zu lösen vermag:
1. Es wird kein Log angelegt. Das
Verzeichnis "C:\Backup-Logs" ist
vorhanden.
2. In der Rückwärtssuche zum
Dateien löschen bekomme ich die
Fehlermeldung
> ""D:\Auslagerungsdateien\%~nxi""
> ist syntaktisch an dieser Stelle nicht
> verarbeitbar.
>
die Unterverzeichnisse!
also bei mir laeuft da garnix...
soweit erstmal dass er es kopiert:
REM @echo off
set src=meineQuelle
set dst=meinZiel
set log=C:\%date%.log
REM den abschliessenden backslash vom quellpfad deleten:
if %src:~-1%==\ set src=%src:~0,-1%
xcopy "%src%" "%dst%" /c /s /e /r /v /d /y /i /h /f /o /x >> %log%
wenn du mehrere zeilen in eine datei schreiben willst (hier dein log), dann musst du das mit >> machen statt mit > da die datei bei jedem eintrag sonst ueberschrieben wird.
Esco
Sync-Tool hab ich schon einige probiert, aber keines hat mit überzeugt.
Das eine stürzt ständig ab, das andere braucht für die 700MB fast 'ne Stunde
und das wieder nächste ist mir einfach zu teuer, um nur ein Verzeichnis zu sync'en...
Das eine stürzt ständig ab, das andere braucht für die 700MB fast 'ne Stunde
und das wieder nächste ist mir einfach zu teuer, um nur ein Verzeichnis zu sync'en...
versuchs mal mit vice versa pro 2 - das geht prima und kostet nur ca $60.
http://www.tgrmn.com
hallo,
hier nun die batch, die vollstaendig funktionieren muesste
anregung dazu gabs hier: Verzeichnisse und Unterverzeichnisse per cmd vergleichen
Esco
hier nun die batch, die vollstaendig funktionieren muesste
@echo off
set src=meineQuelle
set dst=meinZiel
set log=C:\%date%.log
if %src:~-1%==\ set src=%src:~0,-1%
xcopy "%src%" "%dst%" /c /s /e /r /v /d /y /i /h /f /o /x >> %log%
Subst Z: %dst%
for /R Z:\ %%i in ("*.*") do @FC "%%i" "%src%%%~pnxi" >nul || del /s /q "%%i" && echo %%i geloescht>>%log%
anregung dazu gabs hier: Verzeichnisse und Unterverzeichnisse per cmd vergleichen
Esco