Robocopy mehrfach in einer Schleife ausführen
Hallo,
ich habe ein Batch Skript geschreiben, indem verschiedene Verzeichnisse auf eine Externe USB-Platte gespiegelt werden.
Bisher geben ich die Verzeichnisse am Anfang der Batch ein.
Hier einmal meine Batch
Bisher sind es 4 Verzeichnisse die gesichert werden, sollten noch welche hinzukommen muss ich das alles händsich ergänzen.
Mir schwebt vor die Variabelen daten, quellpfad und zeilpfad aus eine txt Datei einzulesen und dann alles in einer Schleife anzuarbeiten.
Leider bekomme ich das mit dem einlesen nicht hin und auch eine Schleife für das robocopy will mir nicht gelingen.
Hat da jemand vielleicht eine Idee????
Die txt Datei mit den Quellen und Zielen dachte ich könnte wie folgt aussehen:
Backup.txt
Bin für jede Hilfe dankbar.
Gruß Daniel König
ich habe ein Batch Skript geschreiben, indem verschiedene Verzeichnisse auf eine Externe USB-Platte gespiegelt werden.
Bisher geben ich die Verzeichnisse am Anfang der Batch ein.
Hier einmal meine Batch
@echo off
::+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
:: Script zur Sicherung von Dateien (für WinXP)
::
:: -Automatisches Sichern von Daten auf Externe Festplatte
:: -Schreiben von Logfiles
:: -Herunterfahren des Rechners
::
:: Version 1.0
:: Daniel König 25.06.2007
:: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
:: Variabelendeklaration:
:: Arbeitsverzeichnis in dem das Script liegt
set workpath=C:ToolsSicherung
:: Laufwerksbuchstabe der externen Festplatte
set ziellaufwerk=W:
:: Datenquelle 1
set daten1="Eigene Dateien"
set quellpfad1=D:TEST1
set zeilpfad1=%ziellaufwerk%TESTEigene Dateien
:: Datenquelle 2
set daten2="Mail"
set quellpfad2=D:Test2
set zeilpfad2=%ziellaufwerk%TESTMail
:: Datenquelle 3
set daten3="Bilder"
set quellpfad3=D:Test3
set zeilpfad3=%ziellaufwerk%TESTBilder
:: Datenquelle 4
set daten4="Quicken"
set quellpfad4=D:Test4
set zeilpfad4=%ziellaufwerk%TESTQuicken
set methode=?
:: Fehlermeldungen für Robocopy
set fehler16=FEHLER!!! Es hat kein Abgelich der Daten stattgefunden, SICHERUNG NICHT ERFOLGREICH!!!!
set fehler8=FEHLER!!! Einige Dateien konnten nicht kopiert werden, bitte Logfile anschauen.
set fehler4=Fehler!!! Beim kopieren wurden gefunden, bitte Logfile anschauen.
set fehler2=Sicherung erfolgreich abgeschlossen, Dateien wurden erfolgreich kopiert, im Zielverzeichnis wurden Dateien gelöscht.
set fehler1=Sicherung erfolgreich abgeschlossen, Dateien wurden erfolgreich kopiert.
set fehler0=Sicherung erfolgreich abgeschlossen, keine geänderte Dateien vorhanden.
:: Logdatei mit Tagesdatum
set tmpbat="%temp%~tmpbat.bat"
showdate /f:"yyyymmdd" /p:"set datum="> %tmpbat%
call %tmpbat%
del %tmpbat%
set logfile=%workpath%logfiles\%datum%-logfile.txt
:: Programmbegin
:ANFANG
echo Script zur Sicherung von Dateien
echo.
echo.
echo Wählen sie die Sicherungsmethode aus:
echo sichern [s]
echo sichern und PC herunterfahren [h]
echo beenden [q]
echo.
set /p methode="Bitte Auswahl trefen: "
echo.
:: Daten sichern
if %methode%== s goto Weiter
:: Daten sichern und PC herunterfahren
if %methode%== h goto Weiter
:: Batch beenden
if %methode%== q goto ENDE
goto WIEDERHOLUNG
:Weiter
:: Test ob externes Laufwerk auch unter angegebenem Laufwerksbuchstaben verfügbar ist.
if not exist %ziellaufwerk% echo Externe Platte (%ziellaufwerk%) angeschaltet??? & goto LW-aendern
goto Aufgabe
:LW-aendern
:: Wenn Ziellaufwerk nicht vorhanden anschalten oder neuen Laufwerksbuchstaben angeben.
echo.
set /p aktuellesLW="Bitte aktuellen LW-Buchstaben der externen Platte angeben [q fuer beeenden]: "
if %aktuellesLW%== q goto ENDE
:: tool Remount.exe von Uwe Sieber zum ändern des Laufwerkbuchstabens
if exist %aktuellesLW% ::ount.exe %aktuellesLW% %ziellaufwerk% & goto Aufgabe
:: Schleife bis das Laufwerk gefunden wird.
goto LW-aendern
:Aufgabe
:: Wiedergabe der zu sichernden Daten und die entsprechenden Ziele - 4 Datensätze möglich
echo Folgende Daten werden nach %ziellaufwerk% gesichert:
echo.
echo von: %quellpfad1%
echo nach: %zeilpfad1%
echo.
echo von: %quellpfad2%
echo nach: %zeilpfad2%
echo.
echo von: %quellpfad3%
echo nach: %zeilpfad3%
echo.
echo von: %quellpfad4%
echo nach: %zeilpfad4%
echo.
:: Pause damit Quell und Zielpfade gesehen werden.
wait 10
:: Protokollierung des Sicherungsbegins
showdate /f:"dd.mm.yyyy hh:mm:ss" /s:" - Sicherung gestartet" >> logfiles/sicherung.txt
showdate /f:"dd.mm.yyyy hh:mm:ss" /s:" - Sicherung gestartet" > mail.txt
:: Sicherung Datensatz 1
:Sichern1
if not exist %quellpfad1% set Ausgabe1=Sicherung %daten1% fehlgeschlagen, Quellpfad nicht vorhanden. & goto end1
robocopy.exe /ZB /MIR /NDL /NP /LOG+:"%logfile%" /TEE "%quellpfad1%" "%zeilpfad1%"
if errorlevel 16 set Ausgabe1=%fehler16% & goto end1
if errorlevel 8 set Ausgabe1=%fehler8% & goto end1
if errorlevel 4 set Ausgabe1=%fehler4% & goto end1
if errorlevel 2 set Ausgabe1=%fehler2% & goto end1
if errorlevel 1 set Ausgabe1=%fehler1% & goto end1
if errorlevel 0 set Ausgabe1=%fehler0% & goto end1
:end1
echo. >>mail.txt
echo Sicherung %daten1%:>>mail.txt
echo -%Ausgabe1%>>mail.txt
echo. >>mail.txt
:: Sicherung Datensatz 2
:Sichern2
if not exist %quellpfad2% set Ausgabe2=Sicherung %daten2% fehlgeschlagen, Quellpfad nicht vorhanden. & goto end2
robocopy.exe /ZB /MIR /NDL /NP /LOG+:"%logfile%" /TEE "%quellpfad2%" "%zeilpfad2%"
if errorlevel 16 set Ausgabe2=%fehler16% & goto end2
if errorlevel 8 set Ausgabe2=%fehler8% & goto end2
if errorlevel 4 set Ausgabe2=%fehler4% & goto end2
if errorlevel 2 set Ausgabe2=%fehler2% & goto end2
if errorlevel 1 set Ausgabe2=%fehler1% & goto end2
if errorlevel 0 set Ausgabe2=%fehler0% & goto end2
:end2
echo. >>mail.txt
echo Sicherung %daten2%:>>mail.txt
echo -%Ausgabe2%>>mail.txt
echo. >>mail.txt
:: Sicherung Datensatz 3
:Sichern3
if not exist %quellpfad3% set Ausgabe3=Sicherung %daten3% fehlgeschlagen, Ziel nicht vorhanden. & goto end3
robocopy.exe /ZB /MIR /NDL /NP /LOG+:"%logfile%" /TEE "%quellpfad3%" "%zeilpfad3%"
if errorlevel 16 set Ausgabe3=%fehler16% & goto end3
if errorlevel 8 set Ausgabe3=%fehler8% & goto end3
if errorlevel 4 set Ausgabe3=%fehler4% & goto end3
if errorlevel 2 set Ausgabe3=%fehler2% & goto end3
if errorlevel 1 set Ausgabe3=%fehler1% & goto end3
if errorlevel 0 set Ausgabe3=%fehler0% & goto end3
:end3
echo. >>mail.txt
echo Sicherung %daten3%:>>mail.txt
echo -%Ausgabe3%>>mail.txt
echo. >>mail.txt
:: Sicherung Datensatz 4
:Sichern4
if not exist %quellpfad4% set Ausgabe4=Sicherung %daten4% erfolgreich, Quellpfad nicht vorhanden. & goto end4
robocopy.exe /ZB /MIR /NDL /NP /LOG+:"%logfile%" /TEE "%quellpfad4%" "%zeilpfad4%"
if errorlevel 16 set Ausgabe4=%fehler16% & goto end4
if errorlevel 8 set Ausgabe4=%fehler8% & goto end4
if errorlevel 4 set Ausgabe4=%fehler4% & goto end4
if errorlevel 2 set Ausgabe4=%fehler2% & goto end4
if errorlevel 1 set Ausgabe4=%fehler1% & goto end4
if errorlevel 0 set Ausgabe4=%fehler0% & goto end4
:end4
echo. >>mail.txt
echo Sicherung %daten4%:>>mail.txt
echo -%Ausgabe4%>>mail.txt
echo. >>mail.txt
:: Ende des Sicherungsvorgangs
showdate /f:"dd.mm.yyyy hh:mm:ss" /s:" + Sicherung beendet" >> Logfiles/sicherung.txt
showdate /f:"dd.mm.yyyy hh:mm:ss" /s:" + Sicherung beendet" >> mail.txt
:AUSGABE
:: Ausgabe der Errorlevel der Sicherung
echo. >> mail.txt
echo Der Logfile befindet sich unter: %logfile% >> mail.txt
echo. >> mail.txt
type mail.txt
if %methode%== s START %windir%
otepad.exe mail.txt & goto ENDE
if %methode%== h goto Ausschalten
:WIEDERHOLUNG
echo.
echo Die getroffene Auswahl ist falsch!!!
echo Bitte wiederholen Sie ihre Auswahl!!
goto ANFANG
:Ausschalten
type "%logfile%" >>mail.txt
cscript.exe sendMail.vbs "--SICHERUNG auf Externe Platte wurde ausgefuehrt--" mail.txt
WAIT 10
if not %methode%== h goto ENDE
rem psshutdown.exe -k -t 00
:ENDE
exit
Bisher sind es 4 Verzeichnisse die gesichert werden, sollten noch welche hinzukommen muss ich das alles händsich ergänzen.
Mir schwebt vor die Variabelen daten, quellpfad und zeilpfad aus eine txt Datei einzulesen und dann alles in einer Schleife anzuarbeiten.
Leider bekomme ich das mit dem einlesen nicht hin und auch eine Schleife für das robocopy will mir nicht gelingen.
Hat da jemand vielleicht eine Idee????
Die txt Datei mit den Quellen und Zielen dachte ich könnte wie folgt aussehen:
Backup.txt
Daten: "Eigene Dateien"
Quelle: D:Eigene Dateien
Ziel: %ziellaufwerk%Daten
Daten: "Mail"
Quelle: D:Mail
Ziel: %ziellaufwerk%Mail
Bin für jede Hilfe dankbar.
Gruß Daniel König
Please also mark the comments that contributed to the solution of the article
Content-Key: 62656
Url: https://administrator.de/contentid/62656
Printed on: May 5, 2024 at 19:05 o'clock
3 Comments
Latest comment
Mahlzeit!
Das ist eigentlich ganz einfach. Vorausgesetzt, Du hast ein Windows ab XP aufwärts (also auch 2003 Server und höher). Dann kann der Befehl "Call" auch Sprungmarken aufrufen, indem man die Sprungmarke statt einem Dateinamen dahintersetzt:
Wichtig ist dabei, dass die Unterprogramme alle bis zum Ende der Datei durchlaufen, also am Besten mit "goto:EOF" abgeschlossen werden, was direkt zum End Of File springt.
Setz also die Variablen, die Deine Quell- und Zielangaben beinhalten, ans Ende des Blocks, der nur einmal durchlaufen werden soll (also alles bis zu den Kopieraktionen) und schreib die Kopieraktion in ein Unterprogramm am Ende des Skripts. Dann kannst Du nach dem Muster hier die Variablen ändern und locker-flockig kopieren lassen, soviel Du willst...
Das ist eigentlich ganz einfach. Vorausgesetzt, Du hast ein Windows ab XP aufwärts (also auch 2003 Server und höher). Dann kann der Befehl "Call" auch Sprungmarken aufrufen, indem man die Sprungmarke statt einem Dateinamen dahintersetzt:
set humbug=Killefit
call :Unterprogramm
set humbug=Nonsense
call :Unterprogramm
goto :EOF
:Unterprogramm
echo %%humbug%% = "%humbug%"
goto :EOF
Wichtig ist dabei, dass die Unterprogramme alle bis zum Ende der Datei durchlaufen, also am Besten mit "goto:EOF" abgeschlossen werden, was direkt zum End Of File springt.
Setz also die Variablen, die Deine Quell- und Zielangaben beinhalten, ans Ende des Blocks, der nur einmal durchlaufen werden soll (also alles bis zu den Kopieraktionen) und schreib die Kopieraktion in ein Unterprogramm am Ende des Skripts. Dann kannst Du nach dem Muster hier die Variablen ändern und locker-flockig kopieren lassen, soviel Du willst...
Hallo
Vielleicht hilft die diese Batch weiter. Etwas umbauen das du sie verwenden kannst mußt du selbst:
miniversum
Vielleicht hilft die diese Batch weiter. Etwas umbauen das du sie verwenden kannst mußt du selbst:
@echo off
set file="Backup.txt"
FOR /F "skip=2 tokens=1 delims=" %%i in ('find /N "Daten:" %file%') do (
call:auslesen %%i
pause
)
:auslesen
set "Daten="
set "Quelle="
set "Ziel="
set /a offset=%1-1
FOR /F "tokens=1* delims=:" %%a in ('more +%offset% %file%') do if not defined Daten set Daten=%%b
set /a offset=%offset%+1
FOR /F "tokens=1* delims=:" %%a in ('more +%offset% %file%') do if not defined Quelle set Quelle=%%b
set /a offset=%offset%+1
FOR /F "tokens=1* delims=:" %%a in ('more +%offset% %file%') do if not defined Ziel set Ziel=%%b
echo ----------
echo %Daten%
echo %Quelle%
echo %Ziel%
echo ----------
goto:eof
miniversum