neutro
Goto Top

batch Datensicherung netzwerk und xcopy

grüss euch liebes administrator team, ich stehe vor einer problematik und kann sie anhand meiner momentanen hirnblockade nicht richtig dynamisch und schön ausprogrammieren... vielleicht könnt ihr mir einen heissen tipp geben.

wir haben hier einen sicherungsprozess der wie folgt aussieht.... es wird von hand ein ordner erstellt je nach ungeradem/geradem datum auf eine jeweilig dafür passende festplatte.

danach wird ein batchfile informationsmässig über suchen/ersetzen angepasst.

so meine lösung für die auswahl der jeweiligen verzeichnisse und die ordnererstellung...

::Datenbackupscript für xxxx V_1.0
@echo off 
color 8C

set datum=%DATE%
set tag=%datum:~0,2%
set /a LeapYr=%tag%%%2

if %LeapYr%==0 ( echo %datum% ist gerade 
		                     chdir G: 
			mkdir G:\%date%  
			xcopy H: G:\%date% /v /e /y )else ( Echo %datum% ist ungerade
								chdir G: 
								mkdir G:\%date%
								xcopy H: G:\%date% /v /e /y )





pause 

so jetzt die zu kopierende verzeichnisse sind in einer batch datei hinterlegt..
bsp.:

xcopy \\192.168.0.102\Home\apex105 G:\14.05.2009\apex105\ /v /e /y

irgendwie muss ich die zwei files miteinander vereinen... meine bisherige lösung würde daraus bestehen, halt die 30 oder mehr xcopy befehle in mein batch file einzubinden.. was das file übermässig aufplustern würde... gibt es da nicht eine bessere lösung????

vielen lieben dank für eure bemühungen

christian

Content-Key: 116148

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

Printed on: April 24, 2024 at 18:04 o'clock

Member: moesch123
moesch123 May 15, 2009 at 09:58:30 (UTC)
Goto Top
Hallo,
ich würde dir gerne helfen, habe aber nicht verstanden was du jetzt wirklich machen willst.

Welche zwei files willst du miteinander vereinen? Die verschiedenen Batchfiles?
Was genau funktioniert noch nicht?

Sorry, wenn ich so blöd frage. face-smile

Gruß

Moesch
Mitglied: 77559
77559 May 15, 2009 at 10:05:38 (UTC)
Goto Top
Hallo Christian,

trrotz mehrfachen Lesens bin ich nicht dahintergekommen wo jetzt genau dein Problem liegt.
Sind die zu sichernden Daten jetzt auf Unterschiedlichen Platten oder willst du auf unterschiedliche Platten sichern?

Bis auf die Angabe gerade ungerade sind doch die if und else Klammern identisch - wozu dann das Ganze?

Warum du darauf bestehst, eine Variable die eine Odd/Even Information enthält LeapYr (also Schaltjahr) zu nennen, bleibt mir unerfindlich.

Die einzelne separate xcopy Zeile lässt auich nicht darauf schließen was du denn da jetzt variieren musst?

Gruß
LotPings
Member: bastla
bastla May 15, 2009 at 10:13:33 (UTC)
Goto Top
Hallo neutro!

Der Unterschied zwischen geradem und ungeradem Datum reduziert sich in dem von Dir geposteten Batch eigentlich auf die Ausgabe des entsprechenden Textes - alles Übrige (inkl unnötigem "chdir G:" - und auch das "mkdir" kannst Du Dir übrigens sparen, da "xcopy" das Zielverzeichnis ohnehin bei Bedarf anlegt) ist ja eigentlich identisch. Sollten wir daher noch mehr wissen (zB, ob sich die Laufwerksbuchstaben der Festplatten unterscheiden)?
Für die zu kopierenden Verzeichnisse könntest Du eine Textdatei (im Beispiel "D:\Include.txt") erstellen und diese dann zeilenweise per "for /f"-Schleife bearbeiten lassen:
for /f "delims=" %%i in (D:\Include.txt) do xcopy "\\192.168.0.102\Home\%%i" "G:\%datum%\%%i\" /v /e /y  
Grüße
bastla

[Edit] Aufgrund der nachgereichten Erklärung Pfade angepasst [/Edit]
Member: neutro
neutro May 15, 2009 at 10:13:41 (UTC)
Goto Top
hey jungZ

sorry für meine intransparente erklärung ;)

also das erste patchfile macht nichts anderes wie zu erkennen ob das datum gerade oder ungerade ist und dementsprechend auf der passenden festplatte eine verzeichniss erstellt...

so jetzt müsst ihr euch vorstellen.. haben wir noch ein zweites batchfile.. das nur xcopy befehlsätze beinhaltet von den zu sicherenden verzeichnissen.... im ingesamten sind das ungefähr 30 xcopy befehle.......

summa so somaro.. gibt es jetzt also zwei batchfiles... eines das entscheidet gerade ungerade und ein verzeichniss erstellt.. und eines mit den xcopy befehlen...

meine unsaubere lösung sieht wie folgt aus ::

if %LeapYr%==0 ( echo %datum% ist gerade 
		    chdir G: 
			mkdir G:\%date%  
			xcopy \\192.168.0.102\Home\apex00 G:\%date% /v /e /y 
			xcopy \\192.168.0.102\Home\apex03 G:\%date% /v /e /y
			xcopy \\192.168.0.102\Home\apex04 
usw.. das zieht sich dann bis zu 30 xcopy anweisung hin.
der gleiche codeabschnitt fällt dann für den "else" zweig an....
ist das jetzt schöner realisierbar ??

hoffe ich habs diesmal transparenter übermitteln können


so long

und dickes danke

christian
Member: neutro
neutro May 15, 2009 at 10:31:58 (UTC)
Goto Top
hey bastla... das hört sich genau nach dem an was ich gesucht habe...
du hast recht ich hab vergessen die paramater zu ändern, bei gerade wird ein verzeichniss auf eine andere partion erzeugt wie bei einem ungeradem datum... deshalb die if anweisung


also würde das txt file wie folgt aussehen.

anstatts altes batchfile
xcopy \\192.168.0.102\Home\apex00 G:\14.05.2009\apex00\ /v /e /y
xcopy \\192.168.0.102\Home\apex03 G:\14.05.2009\apex03\ /v /e /y
xcopy \\192.168.0.102\Home\apex04 G:\14.05.2009\apex04\ /v /e /y
xcopy \\192.168.0.102\Home\apex06 G:\14.05.2009\apex06\ /v /e /y
xcopy \\192.168.0.102\Home\apex07 G:\14.05.2009\apex07\ /v /e /y
xcopy \\192.168.0.102\Home\apex12 G:\14.05.2009\apex12\ /v /e /y
xcopy \\192.168.0.102\Home\apex13 G:\14.05.2009\apex13\ /v /e /y
xcopy \\192.168.0.102\Home\apex17 G:\14.05.2009\apex17\ /v /e /y
xcopy \\192.168.0.102\Home\apex18 G:\14.05.2009\apex18\ /v /e /y
xcopy \\192.168.0.102\Home\apex19 G:\14.05.2009\apex19\ /v /e /y
xcopy \\192.168.0.102\Home\apex32 G:\14.05.2009\apex32\ /v /e /y
xcopy \\192.168.0.102\Home\apex36 G:\14.05.2009\apex36\ /v /e /y
xcopy \\192.168.0.102\Home\apex38 G:\14.05.2009\apex38\ /v /e /y

würde die include.txt nur noch folgende paramter beinhalten:

apex1
apex2
apex3
usw......

ich werde das jetzt mal soweit vollziehen....
also meine if schleife macht dann nur noch die erzeugung des ordners?

mfg und vielen lieben dank an alle


christian

p.s. nen guten hunger ^^
Mitglied: 77559
77559 May 15, 2009 at 11:03:02 (UTC)
Goto Top
Hallo Christian,

in der Annahme das dieses Un-Gerade noch eine Bewandnis hat,
fasse ich das mal zusammen:
::Datenbackupscript für xxxx V_1.0
@Echo off 
Color 8C
Set Datum=%DATE%
Set Tag=%datum:~0,2%
:: Das Datum vorzugsweise Chronologisch
:: Set Datum=%Datum:~6,4%-%Datum:~3,2%-%Datum:~,2%
Set /a "UnGerade=(100+Tag)%%2"  
Set Laufwerk0=G:
Set Laufwerk1=U:
Set Include=D:\Include.txt
Set Quelle=\\192.168.0.102\Home
Call Set Ziel=%%Laufwerk%UnGerade%%%\%Datum%

for /f "delims=" %%i in (%Include%) do (  
  echo xcopy "%Quelle%\%%i" "%Ziel%\%%i\" /v /e /y  
  REM xcopy "%Quelle%\%%i" "%Ziel%\%%i\" /v /e /y  
)  
pause

Es werden alle Befehle ausgegeben. Erst wenn das Rem vor dem xcopy entfernt wird,

wird auch kopiert. Das kannst du dann leicht in eine Logging Funktion umändern indem du die
Ausgabe an eine Datei anhängst >>LogFile.txt

Gruß
LotPings

Edit: Laufwerke angepasst.
Zeile 08 angepasst um 08/09 zu vermeiden.

Edit3: Variable Un-Gerade in UnGerade geändert.
Member: neutro
neutro May 15, 2009 at 11:17:55 (UTC)
Goto Top
okay das ist dann die advanced patch programmier lösung

also ich hab das jetzt alles in eine txt datei geschrieben und der script entscheidet ganz brav mittels modulo div. auf welcher partion er schlussendlich einen ordner anlegen soll und arbeitet dann auf diesem die forschleife ab hier mein code dazu


::Datenbackupscript für xxx V_1.0
@echo off 
color 8C

set datum=%DATE%
set tag=%datum:~0,2%
set /a LeapYr=%tag%%%2

if %LeapYr%==0 ( chdir G: 
	          mkdir G:\%date%
	for /f "delims=" %%i in (D:\Include.txt) do echo xcopy "\\192.168.0.102\Home\%%i" "G:\%datum%\%%i\" /v /e /y  
)else ( 
                              chdir U: 
	mkdir U:\%date%
	for /f "delims=" %%i in (D:\Include.txt) do xcopy "\\192.168.0.102\Home\%%i" "U:\%datum%\%%i\" /v /e /y )  


was ich an deinem coding jetzt noch nicht ganz verstehe ist... wo ist die unterscheidung zwischen gerade und ungerade und dementsprechend die entscheidung auf welchen verzeichniss gesichert werden soll?


vielen dank an alle schonmal für eure proffesionelle hilfe hierfür

wünsche euch bis dahin noch alles gute und ein geruhsames wochenende


mfg

christian aka neutro
Mitglied: 77559
77559 May 15, 2009 at 11:33:16 (UTC)
Goto Top
Zitat von @neutro:
was ich an deinem coding jetzt noch nicht ganz verstehe ist... wo ist
die unterscheidung zwischen gerade und ungerade und dementsprechend
die entscheidung auf welchen verzeichniss gesichert werden soll?

Die Variablen Laufwerk0 und Laufwerk1 beinhalten die LW für gerade -0 und ungerade -1 Tage.

In der Zeile
Call Set Ziel=%%Laufwerk%Un-Gerade%%%\%Datum%
wird der Inhalt der Variable Un-Gerade zur indirekten Adressierung der richtigen Laufwerksvariable benutzt.
Deshalb ist auch dieser (Pseudo-) call notwendig / eine Alternative wäre DelayedExpansion aber das führt jetzt noch zu weit face-smile

Gruß
LotPings

Edit: Ich empfehle aus Eigener Erfaahrung, die Übersicht zu behalten und ein Chronologische Datumsformat zu wählen.
Member: neutro
neutro May 15, 2009 at 11:44:43 (UTC)
Goto Top
so ich bin jetzt mal weg ins wochenende hab hier nur ne halbstagsstelle =(

auf jeden fall mal dickes danke für die hilfe.. werde das nächste woche dann gleich mal einbinden und in die tat umsetzen....


an alle beteiligten hier ein schönes und geruhsames wochenende und besonders dickes lob an LotPings!!
Member: bastla
bastla May 15, 2009 at 13:07:39 (UTC)
Goto Top
@77559
Sollten nicht eigentlich die Laufwerksbuchstaben in den Zeilen 9 und 10 getauscht werden (da ja "G:" für gerade Tage verwendet wird)?

Grüße
bastla
Mitglied: 77559
77559 May 15, 2009 at 13:25:45 (UTC)
Goto Top
Zitat von @bastla:
@77559
Sollten nicht eigentlich die Laufwerksbuchstaben in den Zeilen 9 und 10 getauscht werden (da ja "G:" für gerade Tage verwendet wird)?
Ack, geändert.

Gruß
LotPings
Member: neutro
neutro Jun 09, 2009 at 12:33:41 (UTC)
Goto Top
HI community,

ich habe nochmal eine Frage zu dem angefangen Thema wusste das da noch was kommen wird.

Ich hab das problem das bei dem Datum 08 und 09 folgende Fehlermeldung ausgespuckt wird und folgedessen die Datensicherung nicht angestossen wird =(

"Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.
"==0" ist syntaktisch an dieser Stelle nicht verarbeitbar."

@lotofpings

wenn ich jetzt deine Variante nehme, hab ich das problem das die "call set ziel" anweisung das ziel nur z.b. auf "\09.06.2009" beschränkt, also keine Auswahl der Laufwerke vornimmt.

Vielen Dank für eure Hilfe euer neutro
Mitglied: 77559
77559 Jun 09, 2009 at 15:25:27 (UTC)
Goto Top
Hallo neutro,

habe oben eine Korrektur eingebaut die bei der Berechnung 100 hinzu addiert,
08 / 09 dürften also nicht mehr vorkommen.

Gruß
LotPings
Member: neutro
neutro Jun 10, 2009 at 08:38:16 (UTC)
Goto Top
Grüss dich LotPings,

danke nochmal für deine fixe Antwort so das Problem mit dem Fehler zum 08 und 09 jeden Monats wurde soweit gelöst, es wird keine Fehlermeldung mehr zurück geliefert, aber das kuriose an der ganze Sache ist, das die Modulu Division trotzdem zum 09 den Restwert 0 zurückliefert, was so nicht ganz wahrheitsgemäss ist den 9 %%2 = 1 und nicht 0 kannst du dir das erklären?

wenn ich folgende quelltextpassage
Set Datum=%DATE%
Set Tag=%datum:~0,2%
:: Das Datum vorzugsweise Chronologisch
:: Set Datum=%Datum:~6,4%-%Datum:~3,2%-%Datum:~,2%
Set /a "Un-Gerade=(100+Tag)%%2"  
Set Laufwerk0=G:
Set Laufwerk1=U:
Set Include=D:\Include.txt
Set Quelle=\\192.168.0.102\Home
Call Set Ziel=%Laufwerk%%Un-Gerade%%%\%Datum%


echo %ziel%

bekomme ich folgenden rückwert bei der echoausgabe von "echo %ziel%


Fehlender Operator
\10.06.2009


sollte hierfür nicht eigentlich wenn ich das richtig verstanden habe per div und call set anweisung gleich das laufwerk ausgewählt werden? ich kenne mich leider mit "call set" überhaupt nicht aus und habe darüber auch noch nichts im netz gefunden.

Vielen Dank nochmal für die Hilfe
Mitglied: 77559
77559 Jun 10, 2009 at 10:43:18 (UTC)
Goto Top
Hallo neutro,

Das Einfügen der Klammern in Z06 bei dir (bei mir Z08) sorgt scheinbar dafür,
das das Minus im Variablennamen "Un-Gerade" einen Fehler auslöst. Strange.

Ich ändere den Variablennamen in "UnGerade"
In Zeile 11 ist dir ein Übertragungsfehler unterlaufen, hinter Laufwerk ist ein % zuviel davor eins zuwenig.

Gruß
LotPings
Member: Biber
Biber Jun 10, 2009 at 19:48:59 (UTC)
Goto Top
Zitat von @77559:
Das Einfügen der Klammern in Z06 bei dir (bei mir Z08) sorgt scheinbar dafür,
das das Minus im Variablennamen "Un-Gerade" einen Fehler auslöst. Strange.

Na ja, soooo strange nun auch nicht.
Ein bisschen kurz abgehandelt in der Hilfe zu SET/? vielleicht schon... face-wink

Meine Interpretation: das Minuszeichen wird als monärer Operator und damit vorrangig vor anderen aufgefasst.

Da nun, wie sich am CMD-Prompt nachkaspern lässt, wenn dieses "Minuszeichen-gefolgt-von-whatever" als erstes aufgelöst wird...
 >set /a -5
-5
>set /a -Gerade
0
bei einem mit einer Ziffer beginnenden String ("5") eben der Negativ-Wert genommen wird
... bei einem nicht mit einer Ziffer beginnenden Wert eine Variable angenommen und bei Nichtexistenz als 0 "übersetzt" wird...

---> Haben die Redmonder das doch für ihre Verhältnisse ganz stringent gelöst, oder?

Grüße
Biber
Mitglied: 77559
77559 Jun 10, 2009 at 20:07:23 (UTC)
Goto Top
Zitat von @Biber:
Hallo Biber.
Meine Interpretation: das Minuszeichen wird als monärer Operator und damit vorrangig vor anderen aufgefasst.
Sollte aber bei einer Zuweisung links vom Gleichheitszeichen eigentlich nicht passieren.
Und das tut es ja auch erst wenn rechts die Klammern auftauchen.
Aber Gefahr erkannt - Gefahr gebannt.
Ich werde in Zukunft den Bindestrich in Variablen vermeiden.

Haben die Redmonder das doch für ihre Verhältnisse ganz stringent gelöst, oder?
Damit lässt sich alles erklären face-wink

Gruß
LotPings
Member: neutro
neutro Jun 12, 2009 at 09:31:22 (UTC)
Goto Top
hey jungz ;)

so jetzt hats auch schlussendlich bei mir "ping" =) gemacht wie der script funtzt =) also was die nuance und dem call set auf sich hat,

das ziel laufwerk wird auch fein dargestellt =P ich sag mal danke für die schnell hilfe von allen seiten besonders den pro grammers ^^ lotping und biber =)

wie sich das ganze dann im produktiven verhält werde ich dann ab nächste woche berichten wünsche euch soweit schöne zeit und ich werde auf jeden fall noch report abgeben ;)

grüsse

chris aka neutro