dit-chuss
Goto Top

Per Batch Gestern und Heute auf Zielpfad kopieren

Grundsätzlich ging es bei mir um Datensicherung. Zunächst werden diverse Backups auf NetworkShares eines QNAP NAS geschrieben.
Da das QNAP NAS eine USB und eSATA Schnittstelle besitzt, wird die eSATA Schnittstelle benutzt, um immer die aktuelle Datensicherung auf eine externe Festplatte zu kopieren.

Die Problemstellung an diesem war allerdings, dass die Datensicherungen "Tagesübergreifend" erstellt wurden.
Jeweils die erste Sicherung läuft direkt abends gegen 20 Uhr. Alle weiteren Sicherungen verlaufen sich dann über die 00:00 Uhr Marke, womit wir dann bei dem nächsten Tag waren.

Jetzt stellte sich mir das Problem, dass ich gerne immer die aktuellste Sicherung auf der externen Festplatte hätte.
Dies wollte ich natürlich mit relativ Kostengünstigen Mitteln umsetzen.
Daher kam für mich direkt eine Batch Datei in Frage.
Nach einigem stöbern und Sucheim Netz sowie auf administrator.de bin ich dann auch fündig geworden.
(Sorry wenn ich die Leute nicht mehr nennen kann von denen ich mir die Informationen "Zusammenkopiert" habe.)

Die erste Datei brachte zumindest den "Teilerfolg" der Tageskopie mit erstellen eines Ordners mit aktuellem Datum.
Jetzt war noch das Problem "Gestern" zu lösen. Hier fand ich auch ein schönes vbs skript, welches mir den Tag versüßte face-smile! (Vielen Dank an Biber für sein VBS Script welches hier zu finden ist).

Somit konnte ich dann die komplette Aufgabe in der Aufgabenplaung erstellen.
Zusätzlich habe ich dann noch via des Programms "BLAT" eine Email Benachrichtigung an das Ende gehangen. Somit wird man schön per Email benachrichtigt, wenn das Skript ausgeführt wurde.

!!ACHTUNG!!:
Vorweg habe ich noch einen Löschbefehl, welcher das Ziellaufwerk im Vorfeld löscht (sonst werden immer die Daten nur hinzukopiert)

REM "Mit diesem Befehl werden alle vorhandenen Daten auf dem Ziellaufwerk geloescht"  
U:
del *.* /s /q
rmdir U:\ /s /q

setlocal
REM set "Quelle=\\server1\verzeichnis1"  
REM set "Ziel=\\server2\verzeichnis-xyz"  

REM "hier geben Sie die Quelle und den Zielpfad an, mit diesem Ablauf werden Dateien von HEUTE kopiert mit Endung .tib!!!"  

set "Quelle=Y:\Quelllaufwerk"  
set "Ziel=U:\Ziellaufwerk"  
set "Typ=.tib"  


REM "Hier werden die Variablen definiert"  
REM "Variable: Heute"  

set "Datum=%date%"  

REM "Variable: Gestern"  

echo wscript.echo dateAdd("d",-1, date())>%temp%\Gestern.vbs   
For /f %%i in ('cscript //nologo %temp%\Gestern.vbs') do set "Gestern=%%i"   
del %temp%\Gestern.vbs


for /f "tokens=1-3 delims=." %%a in ("%Datum%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"  
md "%Zielordner%" 2>nul  

pushd "%Quelle%"  
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" copy "%%d" "%Zielordner%"  
REM for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Datum%" echo move "%%d" "%Zielordner%"  
popd


setlocal
REM set "Quelle=\\server1\verzeichnis1"  
REM set "Ziel=\\server2\verzeichnis-xyz"  

REM "hier geben Sie die Quelle und den Zielpfad an, mit diesem Ablauf werden Dateien von GESTERN kopiert mit Endung .tib!!!"  

set "Quelle=X:\"  
set "Ziel=U:\Backup_TS1"  
set "Typ=.tib"  

REM "Hier werden die Variablen definiert"  
REM "Variable: Heute"  

set "Datum=%date%"  

REM "Variable: Gestern"  

echo wscript.echo dateAdd("d",-1, date())>%temp%\Gestern.vbs   
For /f %%i in ('cscript //nologo %temp%\Gestern.vbs') do set "Gestern=%%i"   
del %temp%\Gestern.vbs


for /f "tokens=1-3 delims=." %%a in ("%Gestern%") do set "ZielOrdner=%Ziel%\%%c-%%b-%%a"  
md "%Zielordner%" 2>nul  

pushd "%Quelle%"  
for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Gestern%" copy "%%d" "%Zielordner%"  
REM for /f "tokens=1-3*" %%a in ('dir /a-d /tc *%Typ%^|findstr /i /e "\%Typ%"') do if "%%a"=="%Gestern%" echo move "%%d" "%Zielordner%"  
popd



REM "Zum Mailversand nach dem Erfolgreichen durchlauf der Batchdatei - das Programm Blat muss im System32 Ordner liegen"  

blat -body "Die Sicherung auf die externe Festplatte ist abgeschlossen." -server smtp.provider.de -to empfängeradresse@domain.de -f sendeadresse@domain.de -subject "Datensicherung auf externe Festplatte" -u benutzeranmeldungfuermailversand -pw passwortfuermailversand  


Ich habe hier einfach mal einen Durchlauf aufgeschrieben, welcher die aktuelle Datei von heute (also nach 00:00 Uhr) kopiert und dann noch eine Datei von Gestern (also vor 00:00 Uhr).
Wenn es mehrere Laufwerke oder Quellen sind, kann man einfach die Skriptzeilen untereinander kopieren und dann in der Batch ausführen. Dann wird alles nacheinander durchlaufen.

Bei mir klappt es zumindest. Wenn Fragen sind: nicht an mich face-wink. Ich wollte nur allen anderen die eventuell vor solch einem Problem stehen, eine Lösung bieten.
Bei mir hat es wunderbar funktioniert.

Wünsche euch allen noch nen schönen Tag!

Grüße
Chris

Content-ID: 194982

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr