Backup Skript
Guten Tag,
Ich habe wieder einmal eine Skripting aufgabe im Unterricht bekommen, ohne einen Ansatzpunkt zu haben.
(Bin nicht der Stärkste im Skripten und/oder Programmieren )
Befehlstyp: Batch
Art: Skript
Hier geht es darum ein Tägliches Backup eines Ordners Durchzuführen, wobei die Daten die Gestern erzeugt wurden heute Gesichert werden.
d.h. täglich wird der neuerzeugte Ordner gesichert.
Mein Quell Ordner befindet sich hier \\beispiel\HA1CL1... Ziel ist \\beispiel\BK1CL\
Das Skript muss min. 6 Jahre Laufen, also auf Schaltjahre Aufpassen.
Wenn der Quell Ornder aus irgendeinem Grund nicht zu erreichen ist, soll eine Rückmeldung stattfinden, in der Ausgesagt wird, dass der Ordner nicht da ist.
Ich wäre euch dankbar wenn ihr mir einen Denkansatz geben könntet.
Ich habe mich ein bisschen im Internet Schlau gemacht und habe den Befehl "Robocopy" gefunden wäre das in diesem Fall mein "Schlüssel" ?
Gruß
David
Ich habe wieder einmal eine Skripting aufgabe im Unterricht bekommen, ohne einen Ansatzpunkt zu haben.
(Bin nicht der Stärkste im Skripten und/oder Programmieren )
Befehlstyp: Batch
Art: Skript
Hier geht es darum ein Tägliches Backup eines Ordners Durchzuführen, wobei die Daten die Gestern erzeugt wurden heute Gesichert werden.
d.h. täglich wird der neuerzeugte Ordner gesichert.
Mein Quell Ordner befindet sich hier \\beispiel\HA1CL1... Ziel ist \\beispiel\BK1CL\
Das Skript muss min. 6 Jahre Laufen, also auf Schaltjahre Aufpassen.
Wenn der Quell Ornder aus irgendeinem Grund nicht zu erreichen ist, soll eine Rückmeldung stattfinden, in der Ausgesagt wird, dass der Ordner nicht da ist.
Ich wäre euch dankbar wenn ihr mir einen Denkansatz geben könntet.
Ich habe mich ein bisschen im Internet Schlau gemacht und habe den Befehl "Robocopy" gefunden wäre das in diesem Fall mein "Schlüssel" ?
Gruß
David
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 257664
Url: https://administrator.de/contentid/257664
Ausgedruckt am: 22.11.2024 um 02:11 Uhr
18 Kommentare
Neuester Kommentar
Moin,
mit Robocopy kannst du schon mal das meiste abdecken.
Wenn du noch unerfahren damit bist, dann kannst du auch eine GUI dafür benutzen: http://www.heise.de/download/microsoft-robocopy-gui.html
Gruß
mit Robocopy kannst du schon mal das meiste abdecken.
Wenn du noch unerfahren damit bist, dann kannst du auch eine GUI dafür benutzen: http://www.heise.de/download/microsoft-robocopy-gui.html
Gruß
Nun kann ich ja davon ausgehen du benutzt Windows als System ;)
Damit der Job töglich abläuft kannst du ihn über die Windows "Aufgabenplanung" laufen lassen.
Das automatische anzeigen von Fehlern ist etwas komplexer...Deshalb gibt es ja auch Backupprogramme zum kaufen ;)
Allerdings gibt es dafür auch kleinere Lösungen wie Blat.
Schau dir mal den Post hier an:
email automtisch per Batch versenden
Damit der Job töglich abläuft kannst du ihn über die Windows "Aufgabenplanung" laufen lassen.
Das automatische anzeigen von Fehlern ist etwas komplexer...Deshalb gibt es ja auch Backupprogramme zum kaufen ;)
Allerdings gibt es dafür auch kleinere Lösungen wie Blat.
Schau dir mal den Post hier an:
email automtisch per Batch versenden
Mit deinem Scriptcode wäre die Frage leichter zu beantworten.
könnte dir helfen.
/D:m-d-y Kopiert an oder nach dem angegebenen Datum geänderte Dateien.
Wenn kein Datum angegeben ist, werden nur die Dateien kopiert, die
neuer als die vorhandenen Zieldateien sind.
/S Kopiert Verzeichnisse und Unterverzeichnisse, die nicht leer sind.
/H Kopiert auch versteckte Dateien und Systemdateien.
Alle Parameter findest du hier:
http://support.microsoft.com/kb/240268/de
XCOPY [Quelle] [Ziel] /D /S /H
/D:m-d-y Kopiert an oder nach dem angegebenen Datum geänderte Dateien.
Wenn kein Datum angegeben ist, werden nur die Dateien kopiert, die
neuer als die vorhandenen Zieldateien sind.
/S Kopiert Verzeichnisse und Unterverzeichnisse, die nicht leer sind.
/H Kopiert auch versteckte Dateien und Systemdateien.
Alle Parameter findest du hier:
http://support.microsoft.com/kb/240268/de
Moin Moin,
Du hast ja die Möglichkeit, sollte das ganze in Batch realisiert werden, das ganze mit Variablen zu Verknüpfen.
z.B. Backupspeicherpfad = \\Beispiel\...
BackupVortag = \\Beispiel\...
das ganze hinterlegst du mit deinem Pfad und kopierst das ganze per Robocopy (Backupvortag oder sonstiges Backup Verzeichnis)
Ich würde dir das ja alles gerne hinterlegen, aber du solltest das Ganze selber probieren und entwickeln, so bekommst du dann auch langsam ein
Gefühl für solche sachen.
Das bietet ein Mehrwert als nur zu kopieren, da spreche ich aus Erfahrung :D
Mit besten Grüßen
Du hast ja die Möglichkeit, sollte das ganze in Batch realisiert werden, das ganze mit Variablen zu Verknüpfen.
z.B. Backupspeicherpfad = \\Beispiel\...
BackupVortag = \\Beispiel\...
das ganze hinterlegst du mit deinem Pfad und kopierst das ganze per Robocopy (Backupvortag oder sonstiges Backup Verzeichnis)
Ich würde dir das ja alles gerne hinterlegen, aber du solltest das Ganze selber probieren und entwickeln, so bekommst du dann auch langsam ein
Gefühl für solche sachen.
Das bietet ein Mehrwert als nur zu kopieren, da spreche ich aus Erfahrung :D
Mit besten Grüßen
Wie alaim89 versuche ich dir eine Hilfestellung zur Lösungsfindung zu geben und nicht die Lösung sebst.
Aber wo ist das Problem? Mit /D:m-d-y kannst du das ganze doch begrenzen. Du musst jetzt nur noch m-d-y als variable dekleriaren bzw. füllen und übergeben und es werden nur die Daten übergeben seit dem Tag von dem deine Variable ist.
Wir haben einen Ordner, der so wichtige Daten enthält, dass sie täglich gesichert werden müssen. Wir haben eine langzeitplanung von 6 Jahren und wollen darüber hinuas, dass eine Fehlermeldung erscheint, wenn der Quellordner nicht verfügbar ist. Und das ganze sichern wir mit einem einfachen Skript, welches wir über die geplanten Tasks ausführen. Bei so vielen Fehlerquellen die in der Aufgabenstellung einfach ignoriert werden macht die Aufgabe durchaus Sinn. In der Realität würde man (wenn überhaupt nötig) ein kurzes PS-Skript schreiben, was die existenz des zu sichernden Ordners überprüft und im Fehlerfall den Admin informeirt und eine Backupsoftware kaufen um den Ordner zu sichern. Das ist (a) fehlerunanfälliger und (b) vermutlich auch günstiger als die Arbeitszeit des Admins für die Skripterstellung und tägliche Prüfung ob alles erfolgreich war. Aber hey. Es ist Berufsschule und man muss die Schüler ja mit irgendwelchen Aufgaben fern der Realität beschäftigen ;)
Aber wo ist das Problem? Mit /D:m-d-y kannst du das ganze doch begrenzen. Du musst jetzt nur noch m-d-y als variable dekleriaren bzw. füllen und übergeben und es werden nur die Daten übergeben seit dem Tag von dem deine Variable ist.
Ich habe wieder einmal eine Skripting aufgabe im Unterricht bekommen
Davon mal ganz abgesehen, zeigt deine Aufgabe wieder wie völlig hirnrissig die Berufsschule ist. Mal kurz zusammengefasst:Wir haben einen Ordner, der so wichtige Daten enthält, dass sie täglich gesichert werden müssen. Wir haben eine langzeitplanung von 6 Jahren und wollen darüber hinuas, dass eine Fehlermeldung erscheint, wenn der Quellordner nicht verfügbar ist. Und das ganze sichern wir mit einem einfachen Skript, welches wir über die geplanten Tasks ausführen. Bei so vielen Fehlerquellen die in der Aufgabenstellung einfach ignoriert werden macht die Aufgabe durchaus Sinn. In der Realität würde man (wenn überhaupt nötig) ein kurzes PS-Skript schreiben, was die existenz des zu sichernden Ordners überprüft und im Fehlerfall den Admin informeirt und eine Backupsoftware kaufen um den Ordner zu sichern. Das ist (a) fehlerunanfälliger und (b) vermutlich auch günstiger als die Arbeitszeit des Admins für die Skripterstellung und tägliche Prüfung ob alles erfolgreich war. Aber hey. Es ist Berufsschule und man muss die Schüler ja mit irgendwelchen Aufgaben fern der Realität beschäftigen ;)
Ist jetzt alles nur Ansatz den ich dir gebe, es gibt verschiedene Lösungsmöglichkeiten,
set "backupspeicher=\\server-01\Programme\Backup"
set "backupVortag=\\server-01\Programme\BackupVortag"
if not exist "%backupVortag%" md "%backupVortag%"
move %backupspeicher%\*.* %backupVortag%\
robocopy %backupspeicher%\*.* \\server-02\Backup\ /s /r:1 /w:1 -> im Fehlerfall erfolgt eine Fehlermeldung nach 1 Sekunde
möchtest du das ganze noch geloggt haben,
robocopy %backupspeicher%\*.* \\server-02\Backup\ /s /r:1 /w:1 /log:\\server-01\Programme\Backup\Logs\Protokoll.txt
Das sind nur Ansätze womit man das ganze verfolgen kann.
Wie soeben gesagt, das ganze kommt mit der Erfahrung und der Ausdauer das ganze zu testen :D
Ich hoffe das ich dir im Ansatz helfen konnte.
Beste grüße
set "backupspeicher=\\server-01\Programme\Backup"
set "backupVortag=\\server-01\Programme\BackupVortag"
if not exist "%backupVortag%" md "%backupVortag%"
move %backupspeicher%\*.* %backupVortag%\
robocopy %backupspeicher%\*.* \\server-02\Backup\ /s /r:1 /w:1 -> im Fehlerfall erfolgt eine Fehlermeldung nach 1 Sekunde
möchtest du das ganze noch geloggt haben,
robocopy %backupspeicher%\*.* \\server-02\Backup\ /s /r:1 /w:1 /log:\\server-01\Programme\Backup\Logs\Protokoll.txt
Das sind nur Ansätze womit man das ganze verfolgen kann.
Wie soeben gesagt, das ganze kommt mit der Erfahrung und der Ausdauer das ganze zu testen :D
Ich hoffe das ich dir im Ansatz helfen konnte.
Beste grüße
Hallo,
ich möchte auch noch mal was beisteuern
1) "set backup...." in Häkchen finde ich unglücklich. Setze das lieber bei dem Robocopy (s. meine Beispielscripte)
2) DATE ist auch unglücklich. Versuch mal des Script auf einer anderen OS-Sprache (englisch) auszuführen. Gibt Probs. Ich nehme dazu gerne NTDATE aus den AINTX Tools http://www.bretabennett.com/pubstuff/utils/aintx.zip
3) Die Quell- und Ziel-Variablen habe ich zum Anfang gesetzt und werden später nur durch das Datum ergänzt.
Script 1:
Die Kurze Version. Hier wird nach dem NEUSTEN ERSTELLUNGSDATUM der Ordner gesucht. Wenn also der zu sichernde Ordner der zuletzt erstellte ist, funktioniert es. Zum Schluß des Scripts wird ein neuer leerer Ordner mit dem aktuellen Datum erstellt, sodas es in Kuhzunft funktioniert. Frage ist ansonsten, wann wird der Ordner des aktuellen Tages sonst erstellt?
SCRIPT2:
Ähnlich lang wie Dein Scipt. Andere Verfahrensweise mit NTDATE und dem Tag zurückrechnen.
Alles ohne Gewähr ... happy testing
Bye
Karo
ich möchte auch noch mal was beisteuern
1) "set backup...." in Häkchen finde ich unglücklich. Setze das lieber bei dem Robocopy (s. meine Beispielscripte)
2) DATE ist auch unglücklich. Versuch mal des Script auf einer anderen OS-Sprache (englisch) auszuführen. Gibt Probs. Ich nehme dazu gerne NTDATE aus den AINTX Tools http://www.bretabennett.com/pubstuff/utils/aintx.zip
3) Die Quell- und Ziel-Variablen habe ich zum Anfang gesetzt und werden später nur durch das Datum ergänzt.
Script 1:
Die Kurze Version. Hier wird nach dem NEUSTEN ERSTELLUNGSDATUM der Ordner gesucht. Wenn also der zu sichernde Ordner der zuletzt erstellte ist, funktioniert es. Zum Schluß des Scripts wird ein neuer leerer Ordner mit dem aktuellen Datum erstellt, sodas es in Kuhzunft funktioniert. Frage ist ansonsten, wann wird der Ordner des aktuellen Tages sonst erstellt?
@echo off
set backupQuelleROOT=\\beispiel1\HA1CL1\CL1imss_isfs02
set backupZielROOT=\\beispiel2\Freigabe\Backup
for /f "Tokens=1" %%i in ('%~dp0NTDATE.EXE -f %%Y%%m%%d') do (SET CURDATE=%%i)
ECHO %CURDATE%
REM set /A DD=%CURDATE:~6,2%-1
REM set /A MM=%CURDATE:~4,2%
REM set /A YY=%CURDATE:~0,4%
for /f "Tokens=1" %%i in ('dir %backupQuelleROOT%\ /B /OD /AD /TC') do (SET YY=%%i)
for /f "Tokens=1" %%i in ('dir %backupQuelleROOT%\%YY%\ /B /OD /AD /TC') do (SET MM=%%i)
for /f "Tokens=1" %%i in ('dir %backupQuelleROOT%\%YY%\%MM%\ /B /OD /AD /TC') do (SET DD=%%i)
ECHO JAHR %YY%
ECHO MONAT %MM%
ECHO TAG %DD%
set backupQuelle=%backupQuelleROOT%\%YY%\%MM%\%DD%\
echo %backupQuelle%
set backupZiel=%backupZielROOT%\%YY%\%MM%\%DD%\
echo %backupZiel%
Rem if not exist "%backupZiel%" md "%backupZiel%"
ECHO robocopy "%backupQuelle%" "%backupZiel%" /MIR /log+:"\\med-5233521\Freigabe\Backup\Logs\Protokoll.txt"
:CREATENEWFOLDER
MD "%backupQuelleROOT%\%YY%\%MM%\%DD%\"
SCRIPT2:
Ähnlich lang wie Dein Scipt. Andere Verfahrensweise mit NTDATE und dem Tag zurückrechnen.
@ECHO OFF
set backupQuelleROOT=\\beispiel1\HA1CL1\CL1imss_isfs02
set backupZielROOT=\\beispiel2\Freigabe\Backup
for /f "Tokens=1" %%i in ('%~dp0NTDATE.EXE -f %%Y%%m%%d') do (SET CURDATE=%%i)
ECHO %CURDATE%
set /A DD=%CURDATE:~6,2%-1
set /A MM=%CURDATE:~4,2%
set /A YY=%CURDATE:~0,4%
if /I %dd% GTR 0 goto DONE
set /A mm=%mm% - 1
if /I %mm% GTR 0 goto SETDAY
set /A mm=12
set /A yy=%yy% - 1
:SETDAY
if %mm%==1 goto SET31
if %mm%==2 goto SCHALTJAHR
if %mm%==3 goto SET31
if %mm%==4 goto SET30
if %mm%==5 goto SET31
if %mm%==6 goto SET30
if %mm%==7 goto SET31
if %mm%==8 goto SET31
if %mm%==9 goto SET30
if %mm%==10 goto SET31
if %mm%==11 goto SET30
if %mm%==12 goto SET31
goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE
:SET30
set /A dd=30 + %dd%
goto DONE
:SCHALTJAHR
set /A tt=%yy% %% 4
if not %tt%==0 goto SET28
set /A tt=%yy% %% 100
if not %tt%==0 goto SET29
set /A tt=%yy% %% 400
if %tt%==0 goto SET29
:SET28
set /A dd=28 + %dd%
goto DONE
:SET29
set /A dd=29 + %dd%
goto DONE
:ERROR
ECHO %CURDATE%>>\\med-5233521\Freigabe\Backup\Logs\ERROR.txt""
ECHO ERROR ERROR ERROR ERROR ERROR ERROR ERROR>>\\med-5233521\Freigabe\Backup\Logs\ERROR.txt""
EXIT
:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%
set datum=%DD%.%MM%.%YY%
echo %datum%
set backupQuelle=%backupQuelleROOT%\%YY%\%MM%\%DD%\
echo %backupQuelle%
set backupZiel=%backupZielROOT%\%YY%\%MM%\%DD%\
echo %backupZiel%
Rem if not exist "%backupZiel%" md "%backupZiel%"
ECHO robocopy "%backupQuelle%" "%backupZiel%" /MIR /log+:"\\med-5233521\Freigabe\Backup\Logs\Protokoll.txt"
Alles ohne Gewähr ... happy testing
Bye
Karo