bluebones
Goto Top

NAS-Backups via Batchfiles

In meiner kleinen Windows-Umgebung mit NT5.1 und NT6.0-Rechnern (also ohne Server) betreibe ich eine kleine NAS.
Hersteller: Synology Disk Station DS 209 mit RAID-1; Kapazität ca. 1,3 TByte; Linux-Basis).
Bekanntlich ist selbst ein RAID-1-Verbund kein wirkliches Backup unersetzbarer Datenbestände.
Daher betreibe ich über einen vorhandenen freien USB-Anschluss eine externe HDD (NTFS, Kap. ca. 930 GByte), auf die ich einmal pro Woche über einen Batch-Job die wichtigsten Verzeichnisse per robocopy wegsichere bzw. synchronisiere.

Hierzu verwende ich zwei verschiedene Batch-Files

Einmal eine (ich lasse die Namen im Originalzustand, dann muss ich Inhalte hier nicht anpassen) Verz_eintragen.bat.
Mit der "echo"e ich einzelne Verzeichnisse in eine GETDIRS.txt. Diese erstelle ich selbstredend nicht jedes Mal neu, ich lasse sie stehen und ergänze sie nur ggf.
Die besagte Verz_eintragen.bat sieht - verkürzt - so aus:

@echo OFF
SETLOCAL
SET TRGT=%CD%\Backups
ECHO Definiertes Ziel: %TRGT%

:WORK
TITLE Warte auf Ordner-Definierung...
SET /P ECHODIR=Verzeichnis in Liste eintragen:
IF /I "%ECHODIR%."=="." goto :end
FOR /F "TOKENS=2 DELIMS=:\ " %%a IN ("%ECHODIR%") DO IF NOT EXIST "%TRGT%\%%~na" (MKDIR "%TRGT%\%%~na")
ECHO %ECHODIR%>>GETDIRS.txt
GOTO :WORK

:END
ENDLOCAL
ECHO Das war's!
PAUSE >NUL:


Hier beginnt schon mal mein Dilemma, da beim Schritt (MKDIR "%TRGT%\%%~na") DOS (wie sonst auch) Probleme mit Verzeichnisnamen hat, die Leerzeichen haben.
Nun, wie auch immer. Jedenfalls sorgt folgende GetBackups.bat dafür, die in GETDIRS.txt genannten Verzeichnisse ins Unterverzeichnis \Backups per robocopy zu schaufeln.
Wobei ich klar sagen muss, die Einträge an sich im TXT sind okay. Fehler treten beim folgenden Kontrukt auf:
Hier die GetBackups.bat, die imselben Verzeichnis liegt, wie die txt und die verz_eintragen.bat:

@echo off
SETLOCAL
SET TRGT=%CD%\Backups
::Anmerkung für das Forum: Mit %OPT% kann man mit Eingabe OFF angeben, ob man nach Abschluss des Jobs einen Forced Shutdown möchte oder nicht)
SET OPT=%1

IF /I %TRGT%.==. GOTO :ERRTRGT
ECHO Definiertes Ziel: %TRGT%
IF NOT EXIST %CD%\GETDIRS.txt (
ECHO Keine Verzeichnisliste %CD%\GETDIRS.txt gefunden. Abbruch...
GOTO :END
) else (
ECHO Verzeichnisliste gefunden. Weiter geht's...
)
ECHO.
TYPE GETDIRS.txt
ECHO.
goto :work
IF (%OPT%)==(OFF) GOTO :WORK

SET /P ASK4OFF=Eingabe "OFF" l”st nach Synch-Vorgang %COMPUTERNAME% herunter:
IF (%ASK4OFF%)==(OFF) ECHO Achtung: %COMPUTERNAME% wird nach Sync-Vorgang heruntergefahren. Abbruch ist sp„ter m”glich...
IF (%ASK4OFF%) NEQ (OFF) ECHO %COMPUTERNAME% wird nach Sync-Vorgang NICHT heruntergefahren.
ECHO.

:WORK
for /f "tokens=2* delims=:\" %%a in (GETDIRS.txt) do @if not exist "%TRGT%\%%~na" (MD "%TRGT%\%%~na")
for /f " usebackq delims=" %%b in (GETDIRS.txt) do @echo %TIME:~0,8%: Synchronisiere %TRGT%%%~npb & start /wait "Ziel: %TRGT%%%~npb" robocopy.exe "%%b" "%TRGT%%%~npb" /S /E /W:10 /R:15 /ZB
GOTO :END

:ERRTRGT
ECHO Ziel ist unklar. Abbruch...
ENDLOCAL
GOTO :EOF

:END
ECHO.
IF (%ASK4OFF%)==(OFF) GOTO :OUT
ECHO Das war's!
ENDLOCAL
PAUSE >NUL:
GOTO :EOF

:OUT
shutdown.exe -s -f -t 100 -c "Synchronisation abgeschlossen. Fahre %COMPUTERNAME% herunter..."
ENDLOCAL
ECHO Das war's! Tastendruck verhindert lokalen Shutdown...
PAUSE >NUL:
ECHO Lokaler Shutdown wird unterbunden...
shutdown.exe -a
PAUSE >NUL:


Wer von Euch Weisen sieht den Fehler, der dazu führt, dass Verzeinisse mit Leerzeichen trotz der "" nicht sauber erzeugt werden und der Job abbricht?
Danke Euch schon mal für Eure bisherige Geduld beim Durchlesen und für die Mühe Eurer evtl. Antworten im Voraus!

Content-Key: 133090

Url: https://administrator.de/contentid/133090

Printed on: April 25, 2024 at 22:04 o'clock