Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

batch Datensicherung netzwerk und xcopy

Frage Entwicklung Batch & Shell

Mitglied: neutro

neutro (Level 1) - Jetzt verbinden

15.05.2009, aktualisiert 11:46 Uhr, 4530 Aufrufe, 18 Kommentare

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...

01.
::Datenbackupscript für xxxx V_1.0 
02.
@echo off  
03.
color 8C 
04.
 
05.
set datum=%DATE% 
06.
set tag=%datum:~0,2% 
07.
set /a LeapYr=%tag%%%2 
08.
 
09.
if %LeapYr%==0 ( echo %datum% ist gerade  
10.
		                     chdir G:  
11.
			mkdir G:\%date%   
12.
			xcopy H: G:\%date% /v /e /y )else ( Echo %datum% ist ungerade 
13.
								chdir G:  
14.
								mkdir G:\%date% 
15.
								xcopy H: G:\%date% /v /e /y ) 
16.
 
17.
 
18.
 
19.
 
20.
 
21.
pause 
so jetzt die zu kopierende verzeichnisse sind in einer batch datei hinterlegt..
bsp.:

01.
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
Mitglied: moesch123
15.05.2009 um 11:58 Uhr
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.

Gruß

Moesch
Bitte warten ..
Mitglied: LotPings
15.05.2009 um 12:05 Uhr
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
Bitte warten ..
Mitglied: bastla
15.05.2009 um 12:13 Uhr
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:
01.
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]
Bitte warten ..
Mitglied: neutro
15.05.2009 um 12:13 Uhr
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 ::

01.
if %LeapYr%==0 ( echo %datum% ist gerade  
02.
		    chdir G:  
03.
			mkdir G:\%date%   
04.
			xcopy \\192.168.0.102\Home\apex00 G:\%date% /v /e /y  
05.
			xcopy \\192.168.0.102\Home\apex03 G:\%date% /v /e /y 
06.
			xcopy \\192.168.0.102\Home\apex04  
07.
 
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
Bitte warten ..
Mitglied: neutro
15.05.2009 um 12:31 Uhr
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
01.
xcopy \\192.168.0.102\Home\apex00 G:\14.05.2009\apex00\ /v /e /y 
02.
xcopy \\192.168.0.102\Home\apex03 G:\14.05.2009\apex03\ /v /e /y 
03.
xcopy \\192.168.0.102\Home\apex04 G:\14.05.2009\apex04\ /v /e /y 
04.
xcopy \\192.168.0.102\Home\apex06 G:\14.05.2009\apex06\ /v /e /y 
05.
xcopy \\192.168.0.102\Home\apex07 G:\14.05.2009\apex07\ /v /e /y 
06.
xcopy \\192.168.0.102\Home\apex12 G:\14.05.2009\apex12\ /v /e /y 
07.
xcopy \\192.168.0.102\Home\apex13 G:\14.05.2009\apex13\ /v /e /y 
08.
xcopy \\192.168.0.102\Home\apex17 G:\14.05.2009\apex17\ /v /e /y 
09.
xcopy \\192.168.0.102\Home\apex18 G:\14.05.2009\apex18\ /v /e /y 
10.
xcopy \\192.168.0.102\Home\apex19 G:\14.05.2009\apex19\ /v /e /y 
11.
xcopy \\192.168.0.102\Home\apex32 G:\14.05.2009\apex32\ /v /e /y 
12.
xcopy \\192.168.0.102\Home\apex36 G:\14.05.2009\apex36\ /v /e /y 
13.
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:

01.
apex1 
02.
apex2 
03.
apex3 
04.
usw......
ich werde das jetzt mal soweit vollziehen....
also meine if schleife macht dann nur noch die erzeugung des ordners?

Mit freundlichen Grüßen und vielen lieben dank an alle


christian

p.s. nen guten hunger ^^
Bitte warten ..
Mitglied: LotPings
15.05.2009 um 13:03 Uhr
Hallo Christian,

in der Annahme das dieses Un-Gerade noch eine Bewandnis hat,
fasse ich das mal zusammen:
01.
::Datenbackupscript für xxxx V_1.0 
02.
@Echo off  
03.
Color 8C 
04.
Set Datum=%DATE% 
05.
Set Tag=%datum:~0,2% 
06.
:: Das Datum vorzugsweise Chronologisch 
07.
:: Set Datum=%Datum:~6,4%-%Datum:~3,2%-%Datum:~,2% 
08.
Set /a "UnGerade=(100+Tag)%%2" 
09.
Set Laufwerk0=G: 
10.
Set Laufwerk1=U: 
11.
Set Include=D:\Include.txt 
12.
Set Quelle=\\192.168.0.102\Home 
13.
Call Set Ziel=%%Laufwerk%UnGerade%%%\%Datum% 
14.
 
15.
for /f "delims=" %%i in (%Include%) do ( 
16.
  echo xcopy "%Quelle%\%%i" "%Ziel%\%%i\" /v /e /y 
17.
  REM xcopy "%Quelle%\%%i" "%Ziel%\%%i\" /v /e /y 
18.
)   
19.
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.
Bitte warten ..
Mitglied: neutro
15.05.2009 um 13:17 Uhr
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


01.
 
02.
::Datenbackupscript für xxx V_1.0 
03.
@echo off  
04.
color 8C 
05.
 
06.
set datum=%DATE% 
07.
set tag=%datum:~0,2% 
08.
set /a LeapYr=%tag%%%2 
09.
 
10.
if %LeapYr%==0 ( chdir G:  
11.
	          mkdir G:\%date% 
12.
	for /f "delims=" %%i in (D:\Include.txt) do echo xcopy "\\192.168.0.102\Home\%%i" "G:\%datum%\%%i\" /v /e /y 
13.
)else (  
14.
                              chdir U:  
15.
	mkdir U:\%date% 
16.
	for /f "delims=" %%i in (D:\Include.txt) do xcopy "\\192.168.0.102\Home\%%i" "U:\%datum%\%%i\" /v /e /y ) 
17.
 

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


Mit freundlichen Grüßen

christian aka neutro
Bitte warten ..
Mitglied: LotPings
15.05.2009 um 13:33 Uhr
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

Gruß
LotPings

Edit: Ich empfehle aus Eigener Erfaahrung, die Übersicht zu behalten und ein Chronologische Datumsformat zu wählen.
Bitte warten ..
Mitglied: neutro
15.05.2009 um 13:44 Uhr
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!!
Bitte warten ..
Mitglied: bastla
15.05.2009 um 15:07 Uhr
@LotPings
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
Bitte warten ..
Mitglied: LotPings
15.05.2009 um 15:25 Uhr
Zitat von bastla:
@LotPings
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
Bitte warten ..
Mitglied: neutro
09.06.2009 um 14:33 Uhr
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
Bitte warten ..
Mitglied: LotPings
09.06.2009 um 17:25 Uhr
Hallo neutro,

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

Gruß
LotPings
Bitte warten ..
Mitglied: neutro
10.06.2009 um 10:38 Uhr
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
01.
 
02.
Set Datum=%DATE% 
03.
Set Tag=%datum:~0,2% 
04.
:: Das Datum vorzugsweise Chronologisch 
05.
:: Set Datum=%Datum:~6,4%-%Datum:~3,2%-%Datum:~,2% 
06.
Set /a "Un-Gerade=(100+Tag)%%2" 
07.
Set Laufwerk0=G: 
08.
Set Laufwerk1=U: 
09.
Set Include=D:\Include.txt 
10.
Set Quelle=\\192.168.0.102\Home 
11.
Call Set Ziel=%Laufwerk%%Un-Gerade%%%\%Datum% 
12.
 
13.
 
14.
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
Bitte warten ..
Mitglied: LotPings
10.06.2009 um 12:43 Uhr
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
Bitte warten ..
Mitglied: Biber
10.06.2009 um 21:48 Uhr
Zitat von LotPings:
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...

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...
01.
 >set /a -5 
02.
-5 
03.
>set /a -Gerade 
04.
05.
 
....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
Bitte warten ..
Mitglied: LotPings
10.06.2009 um 22:07 Uhr
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

Gruß
LotPings
Bitte warten ..
Mitglied: neutro
12.06.2009 um 11:31 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
gelöst Xcopy Batch-Datei (3)

Frage von Lauchheimer zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Xcopy Probleme (3)

Frage von GtaGamer zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (1)

Frage von Matzus87 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...