Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Robocopy - mehrere Versionen geänderter Dateien archivieren

Frage Netzwerke Netzwerkmanagement

Mitglied: TimJuPe

TimJuPe (Level 1) - Jetzt verbinden

03.08.2009, aktualisiert 16:10 Uhr, 13226 Aufrufe, 3 Kommentare

Hallo,
ich versuche Robocopy ein paar neue Tricks beizubringen...

für den Fall, dass Robocopy eine geänderte/neuere Datei im Quellverzeichnis findet soll Robocopy nicht die vorhandene Datei im Zielverzeichnis ersetzen, sondern diese umbenennen (dateiname%datum%%Uhrzeit%) und dann die aktuelle Datei kopieren, so dass eine Art Versionshistorie im Archiv entsteht. Leider bin ich noch nicht auf den richtigen Schalter gestoßen und bitte euch daher um Hilfe

Bisheriger Script (Beispiel):
robocopy "\\Dc01\Volume-Z\Software\Treiber" "D:\archive\test" /E /SEC /COPYALL /LOG+:d:\robocopy.log /TEE /V /R:10 /W:30

Gruß
Tim
Mitglied: Exzel
11.11.2009 um 09:44 Uhr
Hallo!

Mich interessiert dieses Thema auch.

Schon irgendeine Lösung gefunden?


Gruß
Bitte warten ..
Mitglied: SpottyDog
17.03.2010 um 14:15 Uhr
Hallo,

nachdem ich auch an diesem Feature interessiert bin und nichts passendes dazu gefunden habe, habe ich mir mal ein kleines Batch-File geschrieben um dies zu realisieren. Für euch beide warscheinlich schon zu spät, aber vielleicht hilft es anderen, die sowas mit einfachen Mitteln realisieren wollen.
Für mich war es das erste Mal, dass ich ein Script schreibe, das mehr als nur Programmaufrufe macht. Also ist es nicht umbedingt die eleganteste Lösung in allen Punkten. Könnte aber wie gesagt als Ansatzpunkt dienen.
Die Lösung nutzt das Feature von Robocopy einen Kopiervorgang zu machen ohne wirklich was zu überschreiben. Anhand des Rückgabewertes und Variation der Aufrufparameter kann man erkennen ob das zu kopierende File schon in gleicher oder geänderter Form auf dem Zielverzeichnis liegt und dieses dann ggf. umbenennen.
Leider ist es nicht das schnellste Pferd im Stall - die Geschwindigkeit ist im Vergleich zum "nackten" Robocopy etwas bescheiden, wenn es darum geht unveränderte Dateien zu überspringen (bei mir ca. 40 pro Sekunde). Wenn sich jemand mal die Mühe macht, das gleiche in C oder Ähnlichem zu schreiben, könnte es deutlich flotter gehen.
Nach dem ganzen Blabla hier das Script (bei mir funktioniert es - Nutzung auf eigene Gefahr):

echo off

set LogFile=D:\backup.log
set src=D:\temp\src\
set dst=D:\temp\dst\

echo. >>%LogFile%
echo Backup %src% nach %dst% gestartet: %date% %time% >>%LogFile%
echo Backup %src% nach %dst% gestartet...

set allcount=0
set copycount=0
set renamecount=0
set skipcount=0
set errorcount=0
set dispcount=0

for /f "tokens=* delims= " %%a in ('attrib /s "%src%*.*"') do call :loopenter "%%a"

goto :Ende

:loopenter
set temppath="%~1"
set temppath="%temppath:~12%
call :loop %temppath%
goto Exitsub

:loop
call :IncAll
set srcpath="%~dp1"

setlocal enabledelayedexpansion
set tdest=!srcpath:%src%=%dst%!
endlocal & set dstpath=%tdest%

set srcpath=%srcpath:\"="%
set dstpath=%dstpath:\"="%

set file="%~nx1"

REM dummy copy mit überschreiben
robocopy %srcpath% %dstpath% %file% /L /W:1 /R:1 >nul

REM wenn dummy nicht kopiert haette, counter erhoehen und exit
if not errorlevel 1 goto IncSkip

REM ansonsten copy ohne ueberschreiben
robocopy %srcpath% %dstpath% %file% /XC /XN /XO /A+:R /W:1 /R:1 >nul

REM bei Fehler Ergebnis noch mal provozieren und exit
if errorlevel 2 (
robocopy %srcpath% %dstpath% %file% /XC /XN /XO /A+:R /W:1 /R:1 /L>>%LogFile%
goto IncError
)

REM wenn kopiert wurde, counter erhoehen und exit
if errorlevel 1 goto IncCopy

REM wenn nicht kopiert werden konnte, dann rename
set zeit=%time:~0,-3%
rename "%dstpath:~1,-1%\%file:~1,-1%" "%~n1(%date%_%zeit::=#%#R)%~x1"

REM noch mal kopieren
robocopy %srcpath% %dstpath% %file% /XC /XN /XO /A+:R /W:1 /R:1 >nul

REM bei Fehler Ergebnis noch mal provozieren und exit
if errorlevel 2 (
robocopy %srcpath% %dstpath% %file% /XC /XN /XO /A+:R /W:1 /R:1 /L >>%LogFile%
goto IncError
)

REM counter erhoehen und exit
goto IncRename

:Exitsub
exit /b 0

:IncAll
set /a allcount+=1

REM das hier ist nur um zu sehen, dass er noch was macht
set /a dispcount+=1
if %dispcount%==500 (
echo %allcount%
set dispcount=0
)
goto Exitsub

:IncCopy
set /a copycount+=1
goto Exitsub

:IncRename
set /a renamecount+=1
goto Exitsub

:IncSkip
set /a skipcount+=1
goto Exitsub

:IncError
set /a errorcount+=1
goto Exitsub


:Ende
echo %allcount% Files in Quellverzeichnis gefunden
echo %copycount% neue Files kopiert
echo %renamecount% neue Files (mit Umbenennung) kopiert
echo %skipcount% identische Files uebersprungen
echo %errorcount% Files konnten nicht kopiert werden

echo %allcount% Files in Quellverzeichnis gefunden >>%LogFile%
echo %copycount% neue Files kopiert >>%LogFile%
echo %renamecount% neue Files (mit Umbenennung) kopiert >>%LogFile%
echo %skipcount% identische Files uebersprungen >>%LogFile%
echo %errorcount% Files konnten nicht kopiert werden >>%LogFile%
echo Backup beendet: %date% %time% >>%LogFile%
echo. >>%LogFile%

echo on
Bitte warten ..
Mitglied: Exzel
17.03.2010 um 15:37 Uhr
Hallo SpottyDog,

verwende zwar jetzt SyncToy von Microsoft als Synchronisationstool, bedanke mich aber trotzdem für die Rückmeldung. Vielleicht kann ich es ja trotzdem mal brauchen!

Gruß
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

Outlook & Mail
Outlook 2010 zeigt Übermittlungsfehler und erstellt mehrere PST-Dateien

Frage von thepatsch zum Thema Outlook & Mail ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...