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...
so jetzt die zu kopierende verzeichnisse sind in einer batch datei hinterlegt..
bsp.:
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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 116148
Url: https://administrator.de/contentid/116148
Printed on: April 24, 2024 at 18:04 o'clock
18 Comments
Latest comment
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
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
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:
Grüße
bastla
[Edit] Aufgrund der nachgereichten Erklärung Pfade angepasst [/Edit]
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
bastla
[Edit] Aufgrund der nachgereichten Erklärung Pfade angepasst [/Edit]
Hallo Christian,
in der Annahme das dieses Un-Gerade noch eine Bewandnis hat,
fasse ich das mal zusammen:
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.
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.
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.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?
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.
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.@77559
Sollten nicht eigentlich die Laufwerksbuchstaben in den Zeilen 9 und 10 getauscht werden (da ja "G:" für gerade Tage verwendet wird)?
Gruß
LotPings
Hallo neutro,
habe oben eine Korrektur eingebaut die bei der Berechnung 100 hinzu addiert,
08 / 09 dürften also nicht mehr vorkommen.
Gruß
LotPings
habe oben eine Korrektur eingebaut die bei der Berechnung 100 hinzu addiert,
08 / 09 dürften also nicht mehr vorkommen.
Gruß
LotPings
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
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
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.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.
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...
>set /a -5
-5
>set /a -Gerade
0
... 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
Hallo Biber.
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.
Gruß
LotPings
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