(Robocopy)batch mit mehreren quellen und zielen möglich?
robocopy batch mit mehreren quellen und zielen
hallo,
ich post hier erstmal mein script wie es momentan ausschaut:
was ich jetzt gerne hätte sind mehrere quellen und ziele in dieser einen batchdatei.
also z.b. dass von i: und j: jeweils auf f:\voll\ gesichert wird und zudem auch noch von k:\a\1 ,
k:\a\3 und k:\a\4 auf f:\voll\a
ist sowas irgendwie möglich mit variablen oder so? oder benötig ich hierfür meherer dateien?
danke schonmal
hallo,
ich post hier erstmal mein script wie es momentan ausschaut:
robocopy.exe "i:\" "F:\Voll" /E /ZB /COPY:DATSOU /SEC /PURGE /IA:RASHNTCEO /FP /R:0 /W:0 /LOG+:"d:\robotcopyloggs\backup%date%.log" /TEE /NP
was ich jetzt gerne hätte sind mehrere quellen und ziele in dieser einen batchdatei.
also z.b. dass von i: und j: jeweils auf f:\voll\ gesichert wird und zudem auch noch von k:\a\1 ,
k:\a\3 und k:\a\4 auf f:\voll\a
ist sowas irgendwie möglich mit variablen oder so? oder benötig ich hierfür meherer dateien?
danke schonmal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 37583
Url: https://administrator.de/contentid/37583
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
7 Kommentare
Neuester Kommentar
Moin fluegelv,
willkommen im Forum.
Wenn es denn als Batch halbwegs lesbar und wartbar bleiben soll, würde ich es ungefähr so machen:
So lässt es sich dann halbwegs lesen....
Gruß
Biber
willkommen im Forum.
Wenn es denn als Batch halbwegs lesbar und wartbar bleiben soll, würde ich es ungefähr so machen:
::---snipp doMyRobocopy.bat
@echo off & setlocal
Set "RoboParms=/E /ZB /COPY:DATSOU /SEC /PURGE /IA:RASHNTCEO /FP /R:0 /W:0"
Set "RoboParms=%Roboparms% " /LOG+:"d:\robotcopyloggs\backup%date%.log" /TEE /NP"
FOR %%i IN ( i:\ j:\) DO Robocopy.exe %%i "F:\Voll" %RoboParms%
FOR %%i IN ( k:\a\1, k:\a\3, k:\a\4) DO Robocopy.exe %%i "F:\Voll\a" %RoboParms%
So lässt es sich dann halbwegs lesen....
Gruß
Biber
Also, fluegelv,
Es wird nacheinander abgearbeitet. Batch bzw. CMD.exe ist da ganz pflegeleicht - erst wenn eine Zeile/eine Anweisung interpretiert und abgearbeitet ist, dann erst passiert irgendetwas mit der nächsten Zeile.
In beiden Zeilen ist die Laufvariable %%i absolut jungfräulich - der CMD-Interpreter kann sich definitiv nicht daran erinnern, die schon mal irgendwo gesehen zu haben.
Aber wenn es für Dich "eindeutiger" oder weniger missverständlich aussieht, dann nimm statt zweimal derselben Laufzeitvariablen zwei "optisch verschiedene". Verschieden sind sie aber ohnehin.
Jeweils in einer Anweisung müssen die Variablen aber gleich (incl. Beachtung von Gross/Kleinschreibung) benannt sein.
Gültig bzw. dokumentiert sind lt. M$ auch nur %%a...%%z, %%A...%%Z.
Hm...ja... Obwohl es dann nur folgerichtig wäre, wenn diese beiden parallelisierbaren Jobs jeweils in eine eigene Log-Datei schreiben.
Denn
1) müssen sie ja voneinander unabhängig sein und sollten dann auch keine gemeinsame Ressource nutzen und
2) würde in der Logdatei Kraut und Rüben stehen, wenn abwechselnd die Protokollmeldungen von JobA und JobB eintrudeln.
Du kannst Dir als für diesen Fall überlegen,
- ob Du zwei Batchdateien startest (oder als Dienst starten lässt) oder..
- in der einen Batchdatei beide als Windows-Anwendung/als "neues Fenster" aufrufst.
Fall 2 wäre dann mit der "START"-Anweisung. Siehe die Hilfe dazu "Start /?"
Ich würde Dir aber eher zwei parallel gestartete Batchdateien empfehlen - das kann sonst keine/r lesen.
Trotzdem ein ungetestete Skizze zu Fall2.
Wenn du diesen Batchschnipsel aufrufst, dann ruft der wiederum sich selbst 2x parallel auf und startet Job1 und Job2.
Und damit zwei Sicherungen parallel in zwei verschiedene Logdateien.
Hope That Helps
Biber
weil ichs seh des FOR %%i IN... und danach nochmal:
wird des 2te FOR %%i IN .. danach abgearbeitet oder kommt der da durcheinander?
wird des 2te FOR %%i IN .. danach abgearbeitet oder kommt der da durcheinander?
Es wird nacheinander abgearbeitet. Batch bzw. CMD.exe ist da ganz pflegeleicht - erst wenn eine Zeile/eine Anweisung interpretiert und abgearbeitet ist, dann erst passiert irgendetwas mit der nächsten Zeile.
In beiden Zeilen ist die Laufvariable %%i absolut jungfräulich - der CMD-Interpreter kann sich definitiv nicht daran erinnern, die schon mal irgendwo gesehen zu haben.
Aber wenn es für Dich "eindeutiger" oder weniger missverständlich aussieht, dann nimm statt zweimal derselben Laufzeitvariablen zwei "optisch verschiedene". Verschieden sind sie aber ohnehin.
FOR %%x IN ( i:\ j:\) DO Robocopy.exe %%x "F:\Voll" %RoboParms%
FOR %%u IN ( k:\a\1, k:\a\3, k:\a\4) DO Robocopy.exe %%u "F:\Voll\a" %RoboParms%
Jeweils in einer Anweisung müssen die Variablen aber gleich (incl. Beachtung von Gross/Kleinschreibung) benannt sein.
Gültig bzw. dokumentiert sind lt. M$ auch nur %%a...%%z, %%A...%%Z.
Da die daten mit k:\ von nem anderen server kommen
kann man des auch so einrichten dass beide server gleichzeitig daten schicken?
also dass die jobs gleichzeitig laufen? bandbreite wär genug vorhanden...
kann man des auch so einrichten dass beide server gleichzeitig daten schicken?
also dass die jobs gleichzeitig laufen? bandbreite wär genug vorhanden...
Hm...ja... Obwohl es dann nur folgerichtig wäre, wenn diese beiden parallelisierbaren Jobs jeweils in eine eigene Log-Datei schreiben.
Denn
1) müssen sie ja voneinander unabhängig sein und sollten dann auch keine gemeinsame Ressource nutzen und
2) würde in der Logdatei Kraut und Rüben stehen, wenn abwechselnd die Protokollmeldungen von JobA und JobB eintrudeln.
Du kannst Dir als für diesen Fall überlegen,
- ob Du zwei Batchdateien startest (oder als Dienst starten lässt) oder..
- in der einen Batchdatei beide als Windows-Anwendung/als "neues Fenster" aufrufst.
Fall 2 wäre dann mit der "START"-Anweisung. Siehe die Hilfe dazu "Start /?"
Ich würde Dir aber eher zwei parallel gestartete Batchdateien empfehlen - das kann sonst keine/r lesen.
Trotzdem ein ungetestete Skizze zu Fall2.
::---snipp doMyParallelRobocopy.bat
@echo off & setlocal
IF [%1]== (
Start /Min "MfG Biber" "%0" 1
Start /Min "MfG Biber" "%0" 2
) ELSE (
IF [%1] NEQ [1] IF [%1] NEQ [2] goto :eof
Set "RoboParms=/E /ZB /COPY:DATSOU /SEC /PURGE /IA:RASHNTCEO /FP /R:0 /W:0"
Set "RoboParms=%Roboparms% " /LOG+:"d:\robotcopyloggs\backup%1_%date%.log" /TEE /NP"
goto Job%1
)
Goto :eof
:Job1
FOR %%i IN ( i:\ j:\) DO Robocopy.exe %%i "F:\Voll" %RoboParms%
eXit
:Job2
FOR %%i IN ( k:\a\1, k:\a\3, k:\a\4) DO Robocopy.exe %%i "F:\Voll\a" %RoboParms%
eXit
Wenn du diesen Batchschnipsel aufrufst, dann ruft der wiederum sich selbst 2x parallel auf und startet Job1 und Job2.
Und damit zwei Sicherungen parallel in zwei verschiedene Logdateien.
Hope That Helps
Biber
Sorry, mein Fehler..
Gruß
Biber
::---snipp doMyParallelRobocopy.bat
@echo off & setlocal
IF [%1]== (
Start /Min "MfG Biber" "%0" 1
Start /Min "MfG Biber" "%0" 2
) ELSE (
IF [%1] NEQ [1] IF [%1] NEQ [2] goto :eof
Set "RoboParms=/E /ZB /COPY:DATSOU /SEC /PURGE /IA:RASHNTCEO /FP /R:0 /W:0"
goto Job%1
)
Goto :eof
:Job1
Set "RoboParms=%Roboparms% /LOG+:"d:\robotcopyloggs\backup%1_%date%.log" /TEE /NP"
FOR %%i IN ( i:\ j:\) DO Robocopy.exe %%i "F:\Voll" %RoboParms%
eXit
:Job2
Set "RoboParms=%Roboparms% /LOG+:"d:\robotcopyloggs\backup%1_%date%.log" /TEE /NP"
FOR %%i IN ( k:\a\1, k:\a\3, k:\a\4) DO Robocopy.exe %%i "F:\Voll\a" %RoboParms%
eXit
Gruß
Biber
Hallo,
ich verstehe nicht ganz dein Problem. Solange du sowohl bei der Quelle und beim Ziel den kompletten Pfad (.\a\xy) angibts, kopiert es doch die Ordner mit. (und nicht nur den Inhalt des Ordners.
MfG joec
wie schaff ich es, dass er mir von k:\a\xy
und k:\a\zz auf f:\voll\ sichert und dabei
die ordner xy und zz mitnimmt?
und k:\a\zz auf f:\voll\ sichert und dabei
die ordner xy und zz mitnimmt?
ich verstehe nicht ganz dein Problem. Solange du sowohl bei der Quelle und beim Ziel den kompletten Pfad (.\a\xy) angibts, kopiert es doch die Ordner mit. (und nicht nur den Inhalt des Ordners.
MfG joec