Backup mit Batch.

Das Leben, das Universum und der ganze Rest.
Antworten
Delphis1982
HELP.COM-Benutzer
Beiträge: 46
Registriert: Mo 8. Jul 2019, 11:11

Backup mit Batch.

Beitrag von Delphis1982 »

Ich habe es unter Off-Topic eingestellt, da es im Grunde nur die DOS-Syntax ist, aber unter Windows 10 läuft.
Aber auch hier passt es eigentlich nicht so recht hin.


Für diejenigen unter euch, die ein modernes Windowssystem nutzen,
aber gerne öfter mal die Befehlszeile sehen wollen,
wie sie vollautomatisch wichtige Arbeiten erledigt, habe ich folgendes:

Habe eine recht umfangreiche Batchdatei geschrieben,
die mittels AOMEI Backupper Pro ein Abbild des Systems auf ein zweites Laufwerk schreibt
und anschließend dieses zusätzlich auf ein NAS kopiert.
Die Batch braucht also erstmal eine zweite Festplatte mit einer ausreichend großen Partition für die Images.
Im jetzigen Zustand muss Platz für VIER Images sein
(Drei Backups, die aufgehoben werden, und Platz für ein viertes temporäres).
Einfach nur eine weitere Partition auf demselben Laufwerk macht erstens keinen Sinn,
zweitens muss die Backupmethode dann geändert werden, da der Befehl erstmal die ganze DISK sichert.
Benutze dieses Skript auf der Arbeit, da unser Backupsystem eigenbrödlerisch ist.
Mit ein paar kleineren Änderungen kann es aber auch mit wbadmin laufen, dann wäre es komplett kostenfrei zu nutzen.



Ursprünglich hatte ich alle Daten, wie Nutzernamen, Laufwerksbuchstaben, Ordnernamen usw
DIREKT in der jeweiligen Zeile drin.
Bei kleineren Änderungen musste ich allerdings das ganze Skript durchsuchen.
Dieses hier arbeitet aber diesmal mit Variablen, diese müssen nur zu Beginn angepasst werden, fertig.
Wer möchte, kann sich das Skript gerne anschauen und bei sich auch benutzen.
Zu diesem Batchfile gehören noch 5 weitere Dateien, die im selben Ordner sein müssen.
Die Batchdatei einfach öffnen, dann wisst ihr, wieso.
Ich habe übrigens einige TIMEOUT Befehle eingebaut, damit man die Texte noch lesen kann.

PS.:
Ich nutze Notepad++, dort stelle ich die Kodierung direkt nach dem Öffnen auf "Weitere\Westeuropäisch\OEM 850" um.
Das solltet ihr idealerweise ebenfalls tun, sobald ihr die Datei geöffnet habt, sonst werden Umlaute falsch angezeigt.


Bei mir befinden sich die Dateien allesamt im Ordner Backup unter C:\Users\Public.
Dort wird die Batch 1x täglich von der Windows Aufgabenplanung gestartet.
Bei mir passiert das Nachts, da wird der Rechner vorher vom BIOS geweckt
und am Schluss vomSkript wieder ausgeschaltet.
Das kann man übrigens einstellen.
Ich habe sogar eingestellt, WENN der PC nach dem Backup heruntergefahren werden soll,
dass er das eben NICHT tut, wenn das Backup innerhalb eines bestimmten,
einstellbaren Zeitraumes fertig werden sollte.
Beispiel:
Im Skript ist eingestellt, dass der PC nach dem Backup heruntergefahren werden soll.
Im Skript ist aber auch meine Arbeitszeit eingetragen.
Sollte das Skript nun NICHT planmäßig starten, (weil das Aufwecken nicht funktioniert hat),
dann wird das Skript normalerweise zum nächstmöglichen Zeitpunkt nachgeholt
(also, wenn ich den Computer SELBER einschalte).
DANN allerdings sitze ich i.d.R. am Rechner, um zu ARBEITEN. Bei mit von 07:30h bis 16:30h.
Da wäre es unpassend, wenn der PC nach dem Backup einfach ausgeht.


Vorraussetzungen:

- Ordner namens Backup unter C:\Users\Public mit folgenden Dateien:
Backup.cmd (bitte erst anpassen)
Backupstart.txt (an eure Volumenummern anpassen)
Backupende.txt (an eure Volumenummern anpassen)
MailbodyOK.txt (Tragt hier den Text ein, der in der Mail erscheinen soll, wenn alles OK ist)
MailbodyFail.txt (Tragt hier den Text ein, der in der Mail erscheinen soll, wenn was schiefgelaufen ist)
Mailsend.exe (https://github.com/muquit/mailsend/releases/)

- Zwei physische Laufwerke; auf dem zweiten muss eine ausreichend große Partition liegen, die KEINEN Buchstaben hat.
Die Volumenummer (mit DISKPART herausfinden) dieser Partition
muss in die Backupstart.txt und Backupende.txt eingetragen werden.

- NAS oder weiterer Rechner mit einer Freigabe für das Backup
(externe Festplatte an Fritzbox wäre die "Arme Leute Variante").


Wichtig:
Mir ist eine hässliche Eigenart des SMB Protokoll aufgefallen.
Das Backup sollte logischerweise einen EIGENEN Benutzernamen auf dem NAS haben.
Sollte aber auf dem NAS, auf welchem das Backup abgelegt werden soll, eine weitere Freigabe existieren,
auf die ihr GANZ NORMAL zugreift, aber unter einem anderen Benutzernamen, gibt es Ärger.
SMB lässt keine mehrfache Anmeldung mit verschiedenen Benutzernamen auf ein und derselben Adresse zu.
Dabei spielt es keine Rolle, dass eure NORMALE Freigabe unter \\NAS\Freigabe liegt,
euer Backup aber unter \\NAS\Backup; es ist beides \\NAS.
Daher dann folgender Tipp:
Wenn eure Freigabe üblicherweise \\NAS\irgendwas lautet,
tragt im Backupskript dann stattdessen die IP des NAS ein (oder umgekehrt).



Hier nun der Code:

Backup.cmd

Code: Alles auswählen

:START
@echo Umgebung wird vorbereitet, Variablen werden gesetzt...
@echo off
break off
verify off
setlocal EnableExtensions
color 70
cls
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM
REM WICHTIG !!!
REM Per Default werden in diesem Skript die Laufwerksbuchstaben A: und B: verwendet.
REM Dieses Skript funktioniert daher erstmal nicht auf Systemen, die über ein Diskettenlaufwerk verfügen.
REM Weiter befinden sich in den Dateien Backupstart.txt und Backupende.txt Anweisungen für DISKPART,
REM die unbedingt vorher an das jeweilige System angepasst werden müssen, da sonst Das Backup fehlschlagen wird.
REM Dieses Skript funktioniert daher erstmal nur auf Systemen, die über mindestens eine zweite Partition verfügen, idealerweise ein zweites Laufwerk, welches aber erstmal versteckt sein sollte.
REM In den Dateien Backupstart.txt und Backupende.txt müssen die Buchstaben hinter "LETTER" mit dem Buchstaben in dieser Batch unter "%LOKALLAUFWERK%" übereinstimmen, da Variablen nicht unterstützt werden.
REM Außerdem ist sicherzustellen, dass unter KEINEN Umständen ein USB-Stick, eine SD-Karte, oder sonst irgendein Wechseldatenträger beim Booten eingesteckt ist,
REM da sonst beim Hochfahren die Laufwerksnummern falsch vergeben werden könnten. Das Skript arbeitet zwar mit Volumebezeichnungen, aber sicher ist sicher.
REM Sollten die Laufwerksbuchstaben %LOKALLAUFWERK% oder %REMOTELAUFWERK% oder sogar BEIDE bereits vergeben sein oder der PC zwingend ein Floppylaufwerk benötigen, müssen die Ziele weiter unten angepasst werden.
REM
REM Bei Laufwerksbuchstaben sind ausschließlich die Zeichen "A-Z" erlaubt (Groß- und Kleinschreibung sind egal, aber üblicherweise wird der Laufwerksbuchstabe GROß geschrieben.
REM Bei Ordnernamen sind die Zeichen "A-Z", "a-z" (keine Umlaute), "0-9", Leerzeichen, das Minuszeichen "-", der Unterstrich "_", der Punkt "." und der Backslash "\" erlaubt.
REM Alle Angaben bitte OHNE Anführungszeichen eintragen.
REM
REM Die folgenden Variablen müssen angepasst werden.
REM
REM Dia Variable "LOKALLAUFWERK" enthält das lokale Laufwerk (ohne Doppelpunkt), auf welchem das Backup liegt.
REM Die Variable "REMOTELAUFWERK" enthält das remote Laufwerk (ohne Doppelpunkt), welches den Backupordner auf einem NAS zeigt.
REM Die Variable "BACKUPPER" enthält den Pfad zu AOMEI Backupper Pro.
REM Die Variable "SCRIPT" enthält den Pfad zu den Skript- und Textdateien, die für die Backupfunktion benötigt werden (z.B. "C:\Users\Public\Roaming").
REM Die Variable "NAS" enthält den NetBIOS-Namen des NAS oder dessen IP-Adresse (z.B. NAS oder 192.168.178.5).
REM Die Variable "NASFOLDER" enthält den Backup-Hauptordner, welches die verschiedenen Unterordner der jeweiligen Benutzer enthält (z.B. "Backups\Images", NICHT "Backups\Images\Sebastian").
REM Die Variable "COMPUTER" enthält den Namen des zu sichernden PCs. Er sollte eindeutig sein (z.B. Server oder Sebastian-PC).
REM Die Variable "SYNC" gibt an, ob nach dem lokalen Backup zusätzlich eine Kopie auf das NAS geschoben werden soll. Erlaubte Werte sind 0 und 1.
REM Die Variable "NASUSER" enthält den zu nutzenden Benutzernamen auf dem NAS, damit das Backup durchgeführt werden kann.
REM Die Variable "NASPASSWORD" enthält das dazugehörige Passwort.
REM Die Variable "MAILSERVER" enthält die Adresse des SMTP-Servers, über den nach Abschluss eine Emailbenachrichtigung gesendet werden soll (z.B. mail.gmx.de.
REM Die Variable "MAILSENDER" enthält die Absenderadresse, über die gesendet wird (z.B. backup@gmx.de.
REM Die Variable "MAILNAME" enthält den Namen, der als Absender angezeigt werden soll (z.B. Backup).
REM Die Variable "MAILRECEIVER" enthält die Empfängeradresse für die Emailbenachrichtigung (z.B. Sebastian@gmx.de.
REM Die Variable "MAILSUBJECTOK" enthält den Betreff der Emailbenachrichtigung, wenn das Backup erfolgreich war (Z.B: Backup auf MeinPC erfolgreich).
REM Die Variable "MAILBODYOK" enthält den Dateinamen der Textdatei, die den eigentlichen Emailtext enthält, wenn das Backup erfolgreich war (diese sollte angepasst werden)
REM Die Variable "MAILSUBJECTFAIL" enthält den Betreff der Emailbenachrichtigung, wenn das Backup NICHT erfolgreich war (z.B. Backupauf Mein-PC fehlgeschlagen).
REM Die Variable "MAILBODYFAIL" enthält den Dateinamen der Textdatei, wenn das Backup NICHT erfolgreich (diese sollte ebenfalls angepasst werden).
REM Die Variable "MAILUSER" enthält den Benutzernamen, um sich am Emailserver anzumelden.
REM Die Variable "MAILPASSWORD" enthält das dazugehörige Passwort.
REM Die Variable "SHUTDOWN" steuert, ob der Computer nach dem Backup heruntergefahren wird. 0 = Der Computer bleibt eingeschaltet. 1 = Der Computer wird heruntergefahren (außer innerhalb der Arbeitszeit).
REM Die Variable "FORCE" steuert, ob die eingestellte Arbeitszeit ignoriert wird. 0 = Der PC bricht innerhalb der Arbeitszeit das Herunterfahren ab. 1 = Der PC wird dennoch heruntergefahren.
REM Die Variablen "STARTHR" und "STARTMIN" markieren den Anfang der Arbeitszeit (MIT führender Null). "STARTHR" enthält die Stunde, "STARTMIN" enthält die Minuten.
REM Die Variablen "ENDHR" und "ENDMIN" markieren das Ende der Arbeitszeit (MIT führender Null). "ENDHR" enthält die Stunde, "ENDMIN" enthält die Minuten.
REM
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
REM
REM Ab hier abwärts die Variablen anpassen (!!! WICHTIG !!! nur die Werte HINTER dem Gleichheitszeichen anpassen).
REM
set LOKALLAUFWERK=A
set REMOTELAUFWERK=B
set BACKUPPER=C:\Program Files (x86)\AOMEI Backupper
set SCRIPT=C:\Users\Public\Backup
set NAS=192.168.178.5
set NASFOLDER=Backups\Systemimages
set NASUSER=Backup
set NASPASSWORD=geheim123
set COMPUTER=Mein-PC
set SYNC=1
set MAILSERVER=smtp.provider.de
set MAILSENDER=backup@provider.de
set MAILNAME=Backup
set MAILRECEIVER=backup@provider.de
set MAILSUBJECTOK=Backup erfolgreich auf %COMPUTER%
set MAILBODYOK=BackupOK.txt
set MAILSUBJECTFAIL=Backup fehlgeschlagen auf %COMPUTER%
set MAILBODYFAIL=BackupFail.txt
set MAILUSER=emaillogin
set MAILPASSWORD=geheim1234
set SHUTDOWN=1
set FORCE=0
set STARTHR=07
set STARTMIN=30
set ENDHR=16
set ENDMIN=30
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
REM Ab hier abwärts nichts verändern !!!
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
rem -----------------------------------------------------------------------------------------------------------------------------
echo Es wird geprüft, ob alle Variablen gesetzt sind...
if not defined LOKALLAUFWERK goto VARERROR
if not defined REMOTELAUFWERK goto VARERROR
if not defined BACKUPPER goto VARERROR
if not defined SCRIPT goto VARERROR
if not defined NAS goto VARERROR
if not defined NASFOLDER goto VARERROR
if not defined NASUSER goto VARERROR
if not defined NASPASSWORD goto VARERROR
if not defined COMPUTER goto VARERROR
if not defined SYNC goto VARERROR
if not defined MAILSERVER goto VARERROR
if not defined MAILSENDER goto VARERROR
if not defined MAILNAME goto VARERROR
if not defined MAILRECEIVER goto VARERROR
if not defined MAILSUBJECTOK goto VARERROR
if not defined MAILBODYOK goto VARERROR
if not defined MAILSUBJECTFAIL goto VARERROR
if not defined MAILBODYFAIL goto VARERROR
if not defined MAILUSER goto VARERROR
if not defined MAILPASSWORD goto VARERROR
if not defined SHUTDOWN goto VARERROR
if not defined STARTHR goto VARERROR
if not defined STARTMIN goto VARERROR
if not defined ENDHR goto VARERROR
if not defined ENDMIN goto VARERROR
timeout /nobreak /t 2 2>NUL >NUL
cls
for /f "tokens=2 delims=[]" %%a in ('ping -n 1 -4 fritz.box^|find /I "fritz.box"') do set IP=%%a
if %IP%==192.168.178.1 echo Erdgeschoss erkannt...
if %IP%==192.168.179.1 echo 2. OG erkannt...
if %IP%==192.168.178.1 goto DRIVEACHECK
if %IP%==192.168.179.1 goto DRIVEACHECK
echo Kein zugelassenes Netzwerk erkannt.
echo Es wird nur ein LOKALES Backup durchgeführt, die Synchronisation mit dem NAS wird übersprungen.
goto DRIVEACHECK

:DRIVEACHECK
timeout /nobreak 2 2>NUL >NUL
cls
echo Ziellaufwerke werden überprüft.
if exist %LOKALLAUFWERK%: echo Es existiert ein Laufwerk %LOKALLAUFWERK%.
if exist %LOKALLAUFWERK%: echo Es wird versucht, dieses Laufwerk freizugeben.
if exist %LOKALLAUFWERK%: diskpart /s "%SCRIPT%\Backupende.txt" 2>NUL >NUL
if exist %LOKALLAUFWERK%: net use %LOKALLAUFWERK%: /d /y 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
if exist %LOKALLAUFWERK%\ goto DRIVEERROR
goto DRIVEBCHECK

:DRIVEBCHECK
timeout /nobreak 2 2>NUL >NUL
cls
echo Ziellaufwerke werden überprüft.
if exist %REMOTELAUFWERK%: echo Es existiert ein Laufwerk %REMOTELAUFWERK%.
if exist %REMOTELAUFWERK%: echo Es wird versucht, dieses Laufwerk freizugeben.
if exist %REMOTELAUFWERK%: diskpart /s "%SCRIPT%\Backupende.txt" 2>NUL >NUL
if exist %REMOTELAUFWERK%: net use %REMOTELAUFWERK%: /d /y 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
if exist %REMOTELAUFWERK%\ goto DRIVEERROR
goto CHECKED

:CHECKED
set WORK=0
set ERRORLEVEL=""
timeout /nobreak 3 2>NUL >NUL
echo Bereits gestartetes Backup wird gestoppt...
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
color E0
timeout /nobreak 1 2>NUL >NUL
echo Temporäre Laufwerke werden erstellt...
timeout /nobreak 1 2>NUL >NUL
echo Erstelle lokales Laufwerk A...
diskpart /s "%SCRIPT%\Backupstart.txt" 2>NUL >NUL
timeout /nobreak 1 2>NUL >NUL
DIR %LOKALLAUFWERK%:\ 2>NUL >NUL
timeout /nobreak 3 2>NUL >NUL
echo Erstelle remote Laufwerk B...
net use %REMOTELAUFWERK%: "\\%NAS%\%NASFOLDER%" /user:"%NASUSER%" "%NASPASSWORD%" /persistent:no 2>NUL >NUL
DIR %REMOTELAUFWERK%:\ 2>NUL >NUL
timeout /nobreak 3 2>NUL >NUL
echo Ordner werden vorbereitet...
echo Temporärer Backupordner auf lokalem Laufwerk %LOKALLAUFWERK%:\ wird gelöscht...
if exist %LOKALLAUFWERK%:\Temp rd /s /q %LOKALLAUFWERK%:\Temp
timeout /nobreak 1 2>NUL >NUL
echo Temporärer Backupordner auf remote Laufwerk %REMOTELAUFWERK%:\ wird gelöscht...
if exist "%REMOTELAUFWERK%:\%COMPUTER%\Temp" rd /s /q "%REMOTELAUFWERK%:\%COMPUTER%\Temp"
timeout /nobreak 1 2>NUL >NUL
echo Temporärer Backupordner auf lokalem Laufwerk %LOKALLAUFWERK%: wird erstellt...
md %LOKALLAUFWERK%:\Temp
timeout /nobreak 2 2>NUL >NUL
echo Backup wird jetzt auf lokalem Laufwerk %LOKALLAUFWERK%: durchgeführt (Versuch 1 von 2)...
c:
cd "%BACKUPPER%"
timeout /nobreak 3 2>NUL >NUL
ambackup /b new /t system /d %LOKALLAUFWERK%:\Temp /n "SystemImage"
if not errorlevel=0 goto RETRY
timeout /nobreak /t 5 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak /t 1 2>NUL >NUL
if not exist "%LOKALLAUFWERK%:\Temp\SystemImage\SystemImage.adi" goto RETRY
echo Abgeschlossen. Prozesse werden beendet...
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 3 2>NUL >NUL
goto OK

:RETRY
color C0
cls
echo Backup ist unvollständig.
echo Backup wird in 5 Sekunden wiederholt...
timeout /nobreak 5 2>NUL >NUL
color E0
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
cls
echo Backup wird jetzt auf lokalem Laufwerk %LOKALLAUFWERK%: durchgeführt (Versuch 2 von 2)...
timeout /nobreak 1 2>NUL >NUL
if exist %LOKALLAUFWERK%:\Temp rd /s /q %LOKALLAUFWERK%:\Temp
ambackup /b new /t system /d %LOKALLAUFWERK%:\Temp /n "SystemImage"
if not exist "%LOKALLAUFWERK%:\Temp\SystemImage\SystemImage.adi" goto ERROR
goto SUCCESS

:SUCCESS
color 20
echo Abgeschlossen. Prozesse werden beendet...
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 3 2>NUL >NUL
goto OK

:RESET
cls
color C0
echo Letztes Backup wurde vorzeitig beendet.
goto CHECKED

:ERROR
color C0
cls
echo Backup fehlgeschlagen. Ordner wird gelöscht
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak 2 2>NUL >NUL
taskkill /f /t /im "vssvc.exe" 2>NUL >NUL
taskkill /f /t /im "wbengine.exe" 2>NUL >NUL
taskkill /f /t /im "backupper.exe" 2>NUL >NUL
taskkill /f /t /im "abcore.exe" 2>NUL >NUL
timeout /nobreak /t 1 2>NUL >NUL
if exist %LOKALLAUFWERK%:\Temp rd /s /q %LOKALLAUFWERK%:\Temp
timeout /nobreak 1 2>NUL >NUL
echo Benachrichtigung wird gesendet...
%SCRIPT%\mailsend -to %MAILRECEIVER% -from %MAILSENDER% -name "%MAILNAME%" -starttls -port 587 -auth -smtp %MAILSERVER% -sub "%MAILSUBJECTFAIL%" +cc +bc -v -user "%MAILUSER%" -pass "%MAILPASSWORD%" -attach "%SCRIPT%\%MAILBODYFAIL%",mime_type,i
timeout /nobreak 3 2>NUL >NUL
goto SHUTDOWNCHECK

:DRIVEERROR
color C0
cls
if exist %LOKALLAUFWERK%:\ echo Laufwerk %LOKAlLAUFWERK% ist bereits belegt.
if exist %LOKALLAUFWERK%:\ echo Bitte die Variablen entsprechend anpassen.
if exist %REMOTELAUFWERK%:\ echo Laufwerk %REMOTELAUFWERK% ist bereits belegt.
if exist %REMOTELAUFWERK%:\ echo Bitte die Variablen entsprechend anpassen.
echo Fehler bei der Aktivierung der Backupziele.
echo Bitte passen Sie die Ziele innerhalb der Variablen an.
timeout /nobreak 5 2>NUL >NUL
goto CLEANUP

:IPERROR
color C0
cls
echo Es wurde kein Router/Netzwerk erkannt.
echo Backup kann ohne Netzwerk nicht durchgeführt werden.
timeout /nobreak 5 2>NUL >NUL
goto CLEANUP

:VARERROR
color C0
cls
echo Eine oder mehrere Variablen sind nicht gesetzt.
echo Bitte überprüfen Sie die Variablen auf Korrektheit.
timeout /nobreak 5 2>NUL >NUL
goto EXIT

:OK
color E0
cls
echo.
echo Abschließende Aufgaben werden ausgeführt und
echo Backups werden sortiert und verschoben...
if exist %LOKALLAUFWERK%:\Temp\SystemImage\SystemImage.adi move %LOKALLAUFWERK%:\Temp\SystemImage\SystemImage.adi %LOKALLAUFWERK%:\Temp\Systemimage.adi 2>NUL >NUL
if exist %LOKALLAUFWERK%:\Temp\SystemImage rd /s /q %LOKALLAUFWERK%:\Temp\SystemImage 2>NUL >NUL
echo Ältester Backupordner (V3) wird gelöscht...
timeout /nobreak 2 2>NUL >NUL
if exist %LOKALLAUFWERK%:\V3 rd /s /q %LOKALLAUFWERK%:\V3 2>NUL >NUL
if exist %LOKALLAUFWERK%:\V2 move %LOKALLAUFWERK%:\V2 %LOKALLAUFWERK%:\V3 2>NUL >NUL
if exist %LOKALLAUFWERK%:\V1 move %LOKALLAUFWERK%:\V1 %LOKALLAUFWERK%:\V2 2>NUL >NUL
if exist %LOKALLAUFWERK%:\Temp move %LOKALLAUFWERK%:\Temp %LOKALLAUFWERK%:\V1 2>NUL >NUL
timeout /nobreak 3 2>NUL >NUL
echo Benachrichtigung wird gesendet...
%SCRIPT%\mailsend -to %MAILRECEIVER% -from %MAILSENDER% -name "%MAILNAME%" -starttls -port 587 -auth -smtp %MAILSERVER% -sub "%MAILSUBJECTOK%" +cc +bc -v -user "%MAILUSER%" -pass "%MAILPASSWORD%" -attach "%SCRIPT%\%MAILBODYOK%",mime_type,i
goto SYNC

:SYNC
if %SYNC%==0 echo Synchronisation wird übersprungen.
timeout /nobreak /t 2 2>NUL >NUL
if %SYNC%==0 goto CLEANUP
cls
echo Lokal erstelltes Backup wird mit remote Laufwerk %REMOTELAUFWERK%:\ synchronisiert...
if not exist "%REMOTELAUFWERK%:\%COMPUTER%" md "%REMOTELAUFWERK%:\%COMPUTER%"
if exist "%REMOTELAUFWERK%:\%COMPUTER%\V3" rd /s /q "%REMOTELAUFWERK%:\%COMPUTER%\V3"
if exist "%REMOTELAUFWERK%:\%COMPUTER%\V2" move "%REMOTELAUFWERK%:\%COMPUTER%\V2" "%REMOTELAUFWERK%:\%COMPUTER%\V3"
if exist "%REMOTELAUFWERK%:\%COMPUTER%\V1" move "%REMOTELAUFWERK%:\%COMPUTER%\V1" "%REMOTELAUFWERK%:\%COMPUTER%\V2"
md "%REMOTELAUFWERK%:\%COMPUTER%\V1"
robocopy %LOKALLAUFWERK%:\V1 "%REMOTELAUFWERK%:\%COMPUTER%\V1" /J /E /V /ETA
color 70
echo.
echo Alle Aufgaben erfolgreich abgeschlossen.
timeout /nobreak 3 2>NUL >NUL
goto CLEANUP

:CLEANUP
cls
echo Temporäre Laufwerke werden wieder entfernt...
C:
CD %SCRIPT%
net use B: /delete /yes 2>NUL >NUL
diskpart /s %SCRIPT%\Backupende.txt 2>NUL >NUL
timeout /nobreak 1 2>NUL >NUL
goto SHUTDOWNCHECK

:SHUTDOWNCHECK
cls
if %SHUTDOWN%==0 goto NOSHUTDOWN
if %SHUTDOWN%==1 goto PREPSHUTDOWN
set SHUTDOWN=0
echo Variable SHUTDOWN ist entweder nicht oder falsch gesetzt.
echo Der Computer wird NICHT heruntergefahren.
timeout /nobreak 5 2>NUL >NUL
goto NOSHUTDOWN

:PREPSHUTDOWN
echo Alle Aufgaben beendet.
echo SHUTDOWN nach dem Backup ist aktiviert.
echo Es wird geprüft, ob der Shutdown durchgeführt werden kann.
timeout /nobreak /t 3 2>NUL >NUL
goto TIMECHECK

:TIMECHECK
set HOUR=%TIME:~0,2%
if "%HOUR:~0,1%" == " "  set HOUR=0%HOUR:~1,1%
set MINUTE=%TIME:~3,2%
if "%MINUTE:~3,1%" == " "  set MINUTE=0%MINUTE:~3,1%
goto TIMECHECK1

:TIMECHECK1
if %HOUR:~0,2% geq %STARTHR%+1 goto TIMECHECK3
if %HOUR:~0,2% geq %STARTHR% goto TIMECHECK2
goto SHUTDOWN

:TIMECHECK2
if %MINUTE:~0,2% geq %STARTMIN% goto TIMECHECK3
goto SHUTDOWN

:TIMECHECK3
if %HOUR:~0,2% geq %ENDHR%+1 goto SHUTDOWN
if %HOUR:~0,2% geq %ENDHR% goto TIMECHECK4
goto ABORT

:TIMECHECK4
if %MINUTE:~0,2% geq %ENDMIN% goto SHUTDOWN
goto ABORT

:ABORT
echo Arbeitszeit festgestellt.
echo Herunterfahren wird abgebrochen.
timeout /nobreak /t 3 2>NUL >NUL
set SHUTDOWN=0
goto NOSHUTDOWN

:SHUTDOWN
cls
echo Alle Aufgaben beendet.
echo Der Computer wird in 10 Sekunden heruntergefahren.
goto EXIT

:NOSHUTDOWN
cls
echo Alle Aufgaben beendet.
echo Der Computer wird nicht heruntergefahren.
goto EXIT

:EXIT
if %SHUTDOWN%==1 goto EXIT1
goto EXIT2

:EXIT1
echo Variablen werden entfernt...
set LOKALLAUFWERK=
set REMOTELAUFWERK=
set SCRIPT=
set NAS=
set NASFOLDER=
set COMPUTER=
set SHUTDOWN=
set NASUSER=
set NASPASSWORD=
SET MAILSERVER=
set MAILSENDER=
set MAILNAME=
set MAILRECEIVER=
set MAILSUBJECTOK=
set MAILBODYOK=
set MAILSUBJECTFAIL=
set MAILBODYFAIL=
set MAILUSER=
set MAILPASSWORD=
set STARTHR=
set STARTMIN=
set ENDHR=
set ENDMIN=
set HOUR=
set MINUTE=
set WORK=
set BACKUPPER=
set ERRORLEVEL=
endlocal EnableExtensions
timeout /nobreak 10 2>NUL >NUL
if %FORCE%==0 goto EXIT2
shutdown /f /s /t 0

:EXIT2
echo Variablen werden entfernt...
set LOKALLAUFWERK=
set REMOTELAUFWERK=
set SCRIPT=
set NAS=
set NASFOLDER=
set COMPUTER=
set SHUTDOWN=
set FORCE=
set NASUSER=
set NASPASSWORD=
SET MAILSERVER=
set MAILSENDER=
set MAILNAME=
set MAILRECEIVER=
set MAILSUBJECTOK=
set MAILBODYOK=
set MAILSUBJECTFAIL=
set MAILBODYFAIL=
set MAILUSER=
set MAILPASSWORD=
set STARTHR=
set STARTMIN=
set ENDHR=
set ENDMIN=
set HOUR=
set MINUTE=
set WORK=
set BACKUPPER=
set ERRORLEVEL=
endlocal EnableExtensions
timeout /nobreak 5 2>NUL >NUL
exit
Backupstart.txt

Code: Alles auswählen

select volume 6
assign letter a
Backupende.txt

Code: Alles auswählen

select volume 6
remove letter a
Compaq Armada 7800 mit 160MB RAM, 8GB IDE SSD und Docking Station
MS-DOS v6.22 (inkl. Sound, TCP/IP, Arachne Browser und Email) + Windows 3.11
Windows 95C
Benutzeravatar
His_Cifnes
Kommandozeilenfetischist
Beiträge: 169
Registriert: Mi 31. Jul 2019, 22:06

Re: Backup mit Batch.

Beitrag von His_Cifnes »

Lösungen um den Dateibaum durchzugehen und "alles zu kopieren, bis auf" gibt es einige. Auch können diese Dateisystem-Attribute setzen, Rechte ebenso.

In der Windowswelt gibt es da auch noch Robocopy und RSync (ja gibts auch für Windows).
Letzteres hat sogar ein eigenes Protokoll, mit dem Du die beschriebenen Samba-Probleme umgehen kannst.... WENN Dein NAS Rsync kann.
Delphis1982
HELP.COM-Benutzer
Beiträge: 46
Registriert: Mo 8. Jul 2019, 11:11

Re: Backup mit Batch.

Beitrag von Delphis1982 »

RSync kann leider mein NAS nicht.
Wird aber bald getauscht gegen eine DX4000. Da jeht et dann.
Klar, umgeht RSync die SMB Probleme, da es ja nicht auf SMB basiert.
Ich habe bis auf Aomei allerdings nur versucht,
möglichst auf Drittsoftware zu verzichten.
Robocopy benutze ich ja auch, gegen Ende der Batch.
Ich schreibe es noch etwas um, damit wbadmin genutzt wird,
dann wäre GAR KEINE Drittsoftware nötig.
Compaq Armada 7800 mit 160MB RAM, 8GB IDE SSD und Docking Station
MS-DOS v6.22 (inkl. Sound, TCP/IP, Arachne Browser und Email) + Windows 3.11
Windows 95C
Antworten