fluegelv
Goto Top

(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:

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

Content-ID: 37583

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

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

Biber
Biber 08.08.2006 um 18:02:22 Uhr
Goto Top
Moin fluegelv,

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
fluegelv
fluegelv 08.08.2006 um 18:24:58 Uhr
Goto Top
face-smile ok danke sieht echt viel besser aus .. ich muss sagen ich hatts noch nie mit logik
aber wenn mans denn sieht schauts doch logisch aus.
weil ichs seh des FOR %%i IN... und danach nochmal: wird des 2te FOR %%i IN .. danach abgearbeitet oder kommt der da durcheinander?

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...
Biber
Biber 08.08.2006 um 19:40:07 Uhr
Goto Top
Also, fluegelv,

weil ichs seh des FOR %%i IN... und danach nochmal:
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...

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
fluegelv
fluegelv 09.08.2006 um 16:35:14 Uhr
Goto Top
ich hätt da jetzt noch nen problem mit den variablen
und zwar übernimmt der mir die irgendwie ned

hier nur der teil:

set opt = /E /ZB /COPY:DATSOU / und ncoh mehr

robocopy.exe k:\ f:\ %opt%

aber der ruft mir die variablen ned ab wiso?
ich habs auch schon mit anführungszeichen und klammern versucht aber nix. normal müsste der mir doch durch die "" die variable als text nehmen und später so ausgeben oder?
Biber
Biber 09.08.2006 um 17:08:20 Uhr
Goto Top
Sorry, mein Fehler..
::---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
fluegelv
fluegelv 10.08.2006 um 14:56:44 Uhr
Goto Top
also meine batch sieht jetzt momentan volgendermaßen aus und funktioniert auch.

@echo OFF & SETLOCAL

SET "par=/E /ZB /COPY:DATSOU /XA:T /R:0 /W:0 /LOG:d:\log\datei-%date%.log /TEE /NP /NDL /NFL"
SET "quell=k:\a\xy
SET "ziel=f:\voll\a\xy"

robocopy.exe %quell% %ziel% %par%

fertig
PAUSE


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?
joec
joec 12.10.2006 um 10:07:27 Uhr
Goto Top
Hallo,

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?


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