@echo off %debug%
rem
rem (c)2010 c't, Johannes Endres
rem
rem Batch-Skript zum Artikel "Hochgeschoben" in c't 2/11, Seite 178
rem
rem verändert zur Benutzung mit dem Backupserver der Mathematik
rem
setlocal enabledelayedexpansion
rem Die Verzeichnisse, die gesichert werden sollen, als Komma-getrennte Liste.
rem Falls der Pfad Leerzeichen enthält, muss er in Anführungszeichen stehen.
rem Die Pfade müssen komplett mit Laufwerksbuchstaben angegeben werden.
rem Beispiel: set dirs=c:\windows, "d:\Meine Fotos", "%userprofile%"
set dirs=
,
rem Ihr FB6-Backup-Username
set fb6user=
rem Der Name des Backup-Verzeichnisses auf dem Server
set backupdir=Backup
rem Anfangs sollte man im Protokoll kontrollieren, ob alles klappt
set logfile=%appdata%\rsynclog.txt
rem --- Ende der Konfiguration ---
set HOME=%appdata%
rem Das Verzeichnis mit rsync finden
rem Zuerst im Pfad nachsehen
call :expandpath rsync.exe
if exist %cwrpath%rsync.exe goto setrsh
rem Der Standardinstallationspfad auf 32-Bit-Windows
set cwrpath="%ProgramFiles%\cwRsync\bin\"
if exist %cwrpath%rsync.exe goto setrsh
rem cwRSync ist ein 32-Bit-Programm, deshalb lautet der Pfad auf 64-Bit-Windows anders
if exist "%ProgramFiles(x86)%" set cwrpath="%ProgramFiles(x86)%\cwRsync\bin\"
if exist %cwrpath%rsync.exe goto setrsh
echo Konnte den Pfad zu rsync.exe nicht bestimmen.
exit/b
:setrsh
rem Der Aufruf aus dem PATH klappt manchmal nicht, also kompletten Pfadnamen benutzen.
rem Falls der private Schlüssel nicht %home%\.ssh\id_rsa ist, geben Sie ihn hier mit -i an.
rem Großschreibung des Varaiablennamens ist wichtig
set RSYNC_RSH=%cwrpath%ssh.exe
if not ""=="%logfile%" (
call :cygpath "%logfile%" logfile
set logopt=--verbose --log-file=!logfile!
)
rem Die folgende Schleife arbeitet sich durch die oben angegebenen Verzeichnisse
for %%p in (%dirs%) do (
rem Den Pfad in cygwin-Notation umwandeln
rem muser Pfad für Mitarbeiter
rem puser Pfad für Professoren
rem suser Pfad für Sekretariate
rem servuser Pfad für Server
call :cygpath %%p lokal
%cwrpath%rsync %logopt% -azbu --delete "!lokal!" %fb6user%@141.99.113.10:/muser/%fb6user%/%backupdir%/ --backup-dir=~/old
)
exit/b
rem Diese Funktion sucht den übergebenen Programmnamen im Pfad und gibt den Pfad der Fundstelle zurück
:expandpath
set cwrpath="%~dp$PATH:1"
exit/b
rem Diese Funktion wandelt einen Pfad in cygwin-Notation um
rem Erster Parameter: Der Pfad in DOS- oder cygwin-Notation
rem Zweiter Parameter: Der Name der Variable, die hinterher den Pfad enthalten soll
:cygpath
rem Falls der Pfad schon im Cygwin-Format ist, keine Umwandlung
echo %~1 | findstr /I /B \/cygdrive/ > nul && (
set %2=%~1
exit/b
)
rem Etwas Batch-Magie, um einen Pfad in Cygwin-Notation umzuwandeln
rem Einmal zuweisen, weil die Ersetzungen nicht mit %1 funktionieren
rem Außerdem korrigiert diese Zuweisung die Kleinschreibung der Pfade
set x=%~dpnx1
rem \ durch / ersetzen
set p=%x:\=/%
rem Doppelpunkte entfernen, die ohnehin nur beim Laufwerksbuchstaben vorkommen
set d=%p::=%
rem /cygdrive/ davor und an die genannte Variable zuweisen
set %2=/cygdrive/%d%
exit /b