davidmue
Goto Top

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 face-big-smile )

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

Content-ID: 257664

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

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

nikoatit
nikoatit 15.12.2014 um 11:37:33 Uhr
Goto Top
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ß
DavidMue
DavidMue 15.12.2014 um 11:54:32 Uhr
Goto Top
Hey,

danke für die schnelle Antwort.

Ich habe das Tool ausprobiert und der hat mir das hier rausgehauen:

robocopy "\\beispiel\david\HA1CL1" "\\med-5233521\Freigabe\Backup" /V /NP /R:10 /W:30  

Soweit so gut, aber das Schwierige ist, was man im tool nicht auswählen kann, ist das dass Täglich laufen soll über mehrere Jahre.
Und die Ausgabe, das der Ordner nicht zu erreichen ist, wenn das mal der Fall sein sollte.

kannst du mir da auch noch weiter helfen ?
chiefteddy
chiefteddy 15.12.2014 um 12:13:45 Uhr
Goto Top
Hallo,

dei Zeitsteuerung kannst Du über den Dienst "geplante Tasks" von Windows-Server realisieren.

Dort konfigurierst Du deine Batch als auszuführendes Programm.

Jürgen
nikoatit
nikoatit 15.12.2014 aktualisiert um 12:57:54 Uhr
Goto Top
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
DavidMue
DavidMue 15.12.2014 um 13:03:34 Uhr
Goto Top
Das trifft aber nicht auf mein Problem zu, denn das muss alles geskriptet sein.

Blat hört sich ganz gut an, ich schaue mal wie ich das in mein Skript verbauen kann.
nikoatit
nikoatit 15.12.2014 um 13:25:32 Uhr
Goto Top
Das trifft aber nicht auf mein Problem zu, denn das muss alles geskriptet sein.
Was meinst du damit?
Du kannst ja schlecht in ein Skript schreiben, dass es sich selbst zu der Zeit XY ausführt...
Windows Aufgabenplanung musst schon mit einbeziehen.
DavidMue
DavidMue 15.12.2014 um 13:37:52 Uhr
Goto Top
Okay ich habe verstanden was du meinst face-smile .

ich werde gleich einen Aufgaben Plan erstellen.
DavidMue
DavidMue 15.12.2014 um 14:58:23 Uhr
Goto Top
So es funktioniert jetzt nur stoße ich jetzt auf ein Weiteres Problem.

Undzwar hat das Verzeichnis, welches ich kopieren möchte meherer unterverzeichnisse.

\\beispiel\HA1CL1\CL1imss_isfs02\2014\12\14

Also \\beispiel\HA1CL1\CL1imss_isfs02\Jahr\Monat\Tag

Jetzt möchte ich ja nur den vorherigen tag kopieren und das jeden tag.

Wie kann ich das Realisieren ? bestimmt mit einer Schleife aber ich weiß nicht wie :/
Doskias
Doskias 15.12.2014 aktualisiert um 15:14:37 Uhr
Goto Top
Mit deinem Scriptcode wäre die Frage leichter zu beantworten.

XCOPY [Quelle] [Ziel] /D /S /H 
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
alaim89
alaim89 15.12.2014 um 15:13:24 Uhr
Goto Top
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
DavidMue
DavidMue 15.12.2014 um 15:25:05 Uhr
Goto Top
Bei 980 GB würde das aber Sehr lange dauern oder liege ich da falsch ?
DavidMue
DavidMue 15.12.2014 um 15:27:32 Uhr
Goto Top
@alaim89

Hey,
kannst du mir vlt. einen Ansatz hinterlegen ? face-big-smile

wenn ich die Variablen deklariert habe, bin ich ja nicht viel weiter gekommen.
Ich müsste ja die Variablen für eine Schleife verwenden oder ?
nother
nother 15.12.2014 um 15:39:45 Uhr
Goto Top
Doskias
Doskias 15.12.2014 um 15:46:14 Uhr
Goto Top
Wie alaim89 versuche ich dir eine Hilfestellung zur Lösungsfindung zu geben und nicht die Lösung sebst. face-smile

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 ;)
alaim89
Lösung alaim89 15.12.2014, aktualisiert am 16.12.2014 um 14:45:25 Uhr
Goto Top
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
DavidMue
DavidMue 16.12.2014 um 07:39:46 Uhr
Goto Top
vielen dank, dann lege ich mal los face-smile
DavidMue
DavidMue 16.12.2014 um 14:45:18 Uhr
Goto Top
Hab es fast geschafft face-smile Fehlen mir nur noch ein paar kleinigkeiten.

Hier ist das Skript welches ich mit einem Kollegen Ausgearbeitet habe.

Und danke an alle die hier mitgewirkt haben.

@echo off



set /a tag=%date:~0,2%-1
set monat=%date:~3,2%
set jahr=%date:~6,4%

echo %jahr%
echo %tag%
echo %Monat%


if %tag% EQU 0 set /a monat=%monat%-1
if %monat% EQU 1 set tag1=31
if %monat% EQU 2 set tag1=28
if %monat% EQU 3 set tag1=31
if %monat% EQU 4 set tag1=30
if %monat% EQU 5 set tag1=31
if %monat% EQU 6 set tag1=30
if %monat% EQU 7 set tag1=31
if %monat% EQU 8 set tag1=31
if %monat% EQU 9 set tag1=30
if %monat% EQU 10 set tag1=31
if %monat% EQU 11 set tag1=30
if %monat% EQU 12 set tag1=31
if %monat% EQU 0 set /a jahr=%jahr%-1
if %monat% EQU 0 set monat=12
if %monat% EQU 1 set tag1=31
if %monat% EQU 2 set tag1=29
if %monat% EQU 3 set tag1=31
if %monat% EQU 4 set tag1=30
if %monat% EQU 5 set tag1=31
if %monat% EQU 6 set tag1=30
if %monat% EQU 7 set tag1=31
if %monat% EQU 8 set tag1=31
if %monat% EQU 9 set tag1=30
if %monat% EQU 10 set tag1=31
if %monat% EQU 11 set tag1=30
if %monat% EQU 12 set tag1=31
if %tag% EQU 0 set tag=%tag1%

set datum=%tag%.%monat%.%jahr%
echo %datum%

set "backupQuelle=\\beispiel1\HA1CL1\CL1imss_isfs02\%jahr%\%Monat%\%tag%\"  

echo %backupQuelle%


set "backupZiel=\\beispiel2\Freigabe\Backup\%jahr%\%Monat%\%tag%\"  

echo %backupZiel%



Rem if not exist "%backupZiel%" md "%backupZiel%"  


robocopy %backupQuelle% %backupZiel% /MIR /log+:\\med-5233521\Freigabe\Backup\Logs\Protokoll.txt


Rem cd c:\Users\David\Downloads\Blat323.64.full\Blat323\full
Rem Blat.exe -to hasanhueseyin.uenver@med.uni-duesseldorf.de -server blablabla -s Successful -body Copy war erfolgreich.
Karo
Karo 16.12.2014 aktualisiert um 16:47:12 Uhr
Goto Top
Hallo,

ich möchte auch noch mal was beisteuern face-wink

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 face-smile

Bye
Karo