Robocopy Backupscript Datumsauswertung
Problem mit der Datumsauswertung.
Ich bräuchte mal eine kleine hilfe, irgendwie stehe ich gerade auf dem Schlauch.
Mein Backupscript wertet das Datum aus dieses wird dann in die Variable WoTa reinschrieben.
Wenn ich diese Variable ausgebe, sagt er mir auch das heute Donnerstag ist.
Allerdings unten in meiner IF Abfrage... verwendet er immer den Montag und nicht den Donnerstag, somit wird mein Backupverzeichnis ins Verzeichnis Montag kopiert.
Ich komm im moment nicht auf den Fehler.
Das Script ist noch im Aufbau, also haut mich nicht
Danke schonmal...
Ich bräuchte mal eine kleine hilfe, irgendwie stehe ich gerade auf dem Schlauch.
Mein Backupscript wertet das Datum aus dieses wird dann in die Variable WoTa reinschrieben.
Wenn ich diese Variable ausgebe, sagt er mir auch das heute Donnerstag ist.
Allerdings unten in meiner IF Abfrage... verwendet er immer den Montag und nicht den Donnerstag, somit wird mein Backupverzeichnis ins Verzeichnis Montag kopiert.
Ich komm im moment nicht auf den Fehler.
@Echo off & setlocal
FOR /F "tokens=1,2,3 delims=." %%a in ('echo %date%') do set yy=%%c & set mm=%%b & set dd=%%a
set /a "TwoDigitYearMax=2038%%1000"
if 1%yy% LSS 200 if 1%yy% LSS 1%TwoDigitYearMax% (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,dow=153*m+2
set /a dow=dow/5+dd+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"
SET RC_path="C:\WINDOWS\System32\ROBOCOPY.EXE"
SET Quelle="C:\Users\test\Downloads"
SET bck_Mo="C:\Montag_Freitag\Montag"
SET bck_Di="C:\Montag_Freitag\Dienstag"
SET bck_Mi="C:\Montag_Freitag\Mittwoch"
SET bck_Do="C:\Montag_Freitag\Donnerstag"
SET bck_Fr="C:\Montag_Freitag\Freitag"
SET Log_dir="C:\test\Backups\Robocopy\"
SET Log_filename=%Log_dir%%WoTa%_%JJ%_%MM%_%TT%.log
SET Copy_MoFr=/MIR /COPYALL /DCOPY:T /A
SET Copy_Fr=/MIR /COPYALL
REM SET Optionen=/R:0 /W:0 /NP / TEE /LOG+:%Log_filename%
if %WoTa%==Montag goto Montag
:Montag
Echo J|del c:\Montag_Freitag\Montag\*.*
%RC_path% %Quelle% %bck_Mo% %Copy_MoFr%
if %WoTa%==Dienstag goto Dienstag
:Dienstag
Echo J|del c:\Montag_Freitag\Dienstag\*.*
%RC_path% %Quelle% %bck_Di% %Copy_MoFr%
if %WoTa%==Mittwoch goto Mittwoch
:Mittwoch
Echo J|del C:\Montag_Freitag\Mittwoch\*.*
%RC_path%%Quelle% %bck_Mi% %Copy_MoFr%
if %WoTa%==Donnerstag goto Donnerstag
:Donnerstag
Echo J|del C:\Montag_Freitag\Donnerstag\*.*
%RC_path%%Quelle% %bck_Do% %Copy_MoFr%
if %WoTa%==Freitag goto Freitag
:Freitag
Echo J|del C:\Montag_Freitag\Freitag\*.*
%RC_path%%Quelle% %bck_Do% %Copy_MoFr%
:END
Das Script ist noch im Aufbau, also haut mich nicht
Danke schonmal...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 29.11.2011 um 19:31:55 Uhr
Verschoben von "Backup" nach "Bätsch".
Content-ID: 176772
Url: https://administrator.de/forum/robocopy-backupscript-datumsauswertung-176772.html
Ausgedruckt am: 23.12.2024 um 17:12 Uhr
20 Kommentare
Neuester Kommentar
Aloha,
wenn du schon das Skript aus diesem Thread nimmst und mit robocopy arbeitest, warum nutzt du dann nicht das zweite Skript von Biber, was simpler und sicherer ist?
Sicherer wäre es dann wohl auch, wenn du deine if-Abfragen einfach weglässt und nur
greetz André
P.S.: Wir mögen hier eigentlich, dass man uns vorher begrüßt, bevor man uns auf sein Problem loslässt ...
- Dein Problem sind die aufeinanderfolgenden Sprungmarken mit halbfertigen if-Abfragen, wenn ich das Datum am Rechner ändere, sodass ein anderer WoTa ensteht, gibt er mir per
echo %WoTa%
auch den korrekten Wochentag aus.
else
beinhalten ... springen die trotzdem in den Tag, sprich if %WoTa%
nicht Montag, geht er einfach weiter und arbeitet dennoch :Montag
ab (und die ganze Reihe runter)- Was machst du nächstes Jahr? => Schaltjahr
- Batch und Datum ... na egal,
wenn du schon das Skript aus diesem Thread nimmst und mit robocopy arbeitest, warum nutzt du dann nicht das zweite Skript von Biber, was simpler und sicherer ist?
Sicherer wäre es dann wohl auch, wenn du deine if-Abfragen einfach weglässt und nur
goto %WoTa%
nutzt und am Ende jeweiliger Sprungmarke ein goto :eof
einfügst (und damit das Skript beendest)greetz André
P.S.: Wir mögen hier eigentlich, dass man uns vorher begrüßt, bevor man uns auf sein Problem loslässt ...
Sicherer wäre es dann wohl auch, wenn du deine if-Abfragen einfach weglässt und nur goto %WoTa% nutzt face-wink und am Ende jeweiliger Sprungmarke ein goto :eof einfügst (und damit das Skript beendest)
wobei ... nutze %WoTa% doch einfach im Pfad ...
Echo J|del c:\Montag_Freitag\%WoTa%\*.*
%RC_path% %Quelle% "C:\Montag_Freitag\%WoTa%" %Copy_MoFr%
btw:
%RC_path%%Quelle% %bck_Do% %Copy_MoFr%
Und das steht auch bei Freitag ...und wo verwendest du eigentlich
%Copy_Fr%
?
Moin SuperSonic,
Falls denn das Problem noch besteht, dann poste doch bitte mal den jetzigen Schnipsel-Entwurf.
Dann ziehen wir das glatt.
Ich verschiebe den Beitrag schon mal von "ich hätte lieber Bäckupper werden sollen" nach "Bäck in Hell".
Grüße
Biber
P.S. Und keine Angst - niemand wird T-Mo holen...
Zitat von @SuperSonic:
Also, irgendwie funktioniert das alles so nicht wie ich will... auch wenn ich das Umstelle... jetzt bin ich echt Verzweifel
Also, irgendwie funktioniert das alles so nicht wie ich will... auch wenn ich das Umstelle... jetzt bin ich echt Verzweifel
Falls denn das Problem noch besteht, dann poste doch bitte mal den jetzigen Schnipsel-Entwurf.
Dann ziehen wir das glatt.
Ich verschiebe den Beitrag schon mal von "ich hätte lieber Bäckupper werden sollen" nach "Bäck in Hell".
Grüße
Biber
P.S. Und keine Angst - niemand wird T-Mo holen...
Moin SuperSonic,
langsam, langsam.....
Es bringt für das konkrete Anliegen ja nichts, wenn du da eine VBSkript-Hülse drumstrickst statt ein Batch-Mäntelchen.
Was doch eigentlich passieren soll, wenn wir mal die Schörkel weglassen:
Am Ende des Tages soll eine RabottiCopy.exe gestartet werden. Fertig.
Ob ich dat Dingen aus einem Batch oder aus VBS heraus aufrufe....
... ich sach mal so: auch zum Öffnen meines sonntäglichen Frühstückeis stehen mir Werkzeuge vom Plastiklöffel bis zum Gabelstapler zur Verfügung.
Ich würde es aber nicht zu aufwendig angehen.
Das Problem in deiner Batchvariante ist doch nicht die Ermittlung des Wochentages - den bekommst du doch irgendwie.
Das Problem ist, dass du beim Auffächern der 7-Wochentage-7-Möglichkeiten offensichtlich nicht alle 7 Varianten gleichzeitig im Auge behalten kannst und dir immer ein oder zwei davon auf die Füsse fallen.
Also entzerre doch dieses Gestrunkele:
---> analog zu Skyes Vorschlag...
Grüße
Biber
langsam, langsam.....
Es bringt für das konkrete Anliegen ja nichts, wenn du da eine VBSkript-Hülse drumstrickst statt ein Batch-Mäntelchen.
Was doch eigentlich passieren soll, wenn wir mal die Schörkel weglassen:
Am Ende des Tages soll eine RabottiCopy.exe gestartet werden. Fertig.
Ob ich dat Dingen aus einem Batch oder aus VBS heraus aufrufe....
... ich sach mal so: auch zum Öffnen meines sonntäglichen Frühstückeis stehen mir Werkzeuge vom Plastiklöffel bis zum Gabelstapler zur Verfügung.
Ich würde es aber nicht zu aufwendig angehen.
Das Problem in deiner Batchvariante ist doch nicht die Ermittlung des Wochentages - den bekommst du doch irgendwie.
Das Problem ist, dass du beim Auffächern der 7-Wochentage-7-Möglichkeiten offensichtlich nicht alle 7 Varianten gleichzeitig im Auge behalten kannst und dir immer ein oder zwei davon auf die Füsse fallen.
Also entzerre doch dieses Gestrunkele:
...
REM irgendwie irgendwo kommt der Zahlenwert %dow% her...
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
If %dow% equ 6 set "WoTa=Samstag"
If %dow% equ 7 set "WoTa=Sonntag"
SET RC_path="C:\WINDOWS\System32\ROBOCOPY.EXE"
SET Quelle="C:\Users\test\Downloads"
SET bck_Mo="C:\Montag_Freitag\Montag"
SET bck_Di="C:\Montag_Freitag\Dienstag"
SET bck_Mi="C:\Montag_Freitag\Mittwoch"
SET bck_Do="C:\Montag_Freitag\Donnerstag"
SET bck_Fr="C:\Montag_Freitag\Freitag"
SET Log_dir="C:\test\Backups\Robocopy\"
SET Log_filename=%Log_dir%%WoTa%_%JJ%_%MM%_%TT%.log
SET Copy_MoFr=/MIR /COPYALL /DCOPY:T /A
SET Copy_Fr=/MIR /COPYALL
REM SET Optionen=/R:0 /W:0 /NP / TEE /LOG+:%Log_filename%
if %WoTa%==Montag goto Montag
:Montag
Echo J|del c:\Montag_Freitag\Montag\*.*
%RC_path% %Quelle% %bck_Mo% %Copy_MoFr%
if %WoTa%==Dienstag goto Dienstag
:Dienstag
Echo J|del c:\Montag_Freitag\Dienstag\*.*
%RC_path% %Quelle% %bck_Di% %Copy_MoFr%
.....
....
---> analog zu Skyes Vorschlag...
...
If %dow% equ 6 goto :eof && REM kein Backup, Ende
If %dow% equ 7 goto :eof && REM kein Backup, Ende
If %dow% equ 1 set "WoTa=Montag"
If %dow% equ 2 set "WoTa=Dienstag"
If %dow% equ 3 set "WoTa=Mittwoch"
If %dow% equ 4 set "WoTa=Donnerstag"
If %dow% equ 5 set "WoTa=Freitag"
SET RC_path="C:\WINDOWS\System32\ROBOCOPY.EXE"
SET Quelle="C:\Users\test\Downloads"
SET Log_dir="C:\test\Backups\Robocopy\"
SET Log_filename=%Log_dir%%WoTa%_%JJ%_%MM%_%TT%.log
SET Copy_MoFr=/MIR /COPYALL /DCOPY:T /A
SET Copy_Fr=/MIR /COPYALL
REM SET Optionen=/R:0 /W:0 /NP / TEE /LOG+:%Log_filename%
del c:\Montag_Freitag\%WoTa%\*.* /y
%RC_path% %Quelle% c:\Montag_Freitag\%WoTa%\ %Copy_MoFr%
REM das wars.
Grüße
Biber
Aloha Biber,
naja nur dass ich auch meinte - sinnvollerweise Zeile 32 als
zu nutzen, denn so benötigt er wirklich nur noch eine Zeile, denn deine eine ist nur für Montag gültig und so spart man sich auch weitere 5 Zeilen im Skript *gg*
greetz André
naja nur dass ich auch meinte - sinnvollerweise Zeile 32 als
%RC_path% %Quelle% "C:\Montag_Freitag\%WoTa%" %Copy_MoFr%
greetz André
... genau das habe ich dir bereits mehrfach geschrieben mit samt Codebox wie du in diesem Beitrag hättest lesen müssen ...
ist doch eigentlich nicht so schwer zu verstehen ... genau dazu hat man doch Variablen
ist doch eigentlich nicht so schwer zu verstehen ... genau dazu hat man doch Variablen
Moin SuperSonic,
Genau das war das Wesentliche.
Skye hat es handwerklich noch etwas sauberer/sicherer gemacht in seiner Zeile
durch die umschliessenden Anführungszeichen rund um das Kopierziel.
Ebenso sollte auch der Parameter %Quelle% in Anführungszeichen geschrieben werden wegen eventueller Leerzeichen im Pfadnamen.
Das ist aber alles vergleichsweise kosmetisch - wesentlich war das Lernziel
"Sieben mögliche Usecases bedeuten nicht zwangsläufig sieben einzelne Sub-Prozeduren.
Wenn denn 5 Fälle (Mo-Fr) gleich zu behandeln sind und zwei andere Wochentage auch gleich (Sa+So), dann brauche ich keine 7 Variationen, sondern zwei."
Falls du dich unbedingt in IF -Verzweigungen üben willst -- ein IF-Fall wäre ja noch abzubilden.
Die Freitagssicherung ist ja - zumindest in deinem Eröffnungsbeitrag - eine Sonderlocke -> dafür fehlt noch ein IF-Konstrukt.
Grüße
Biber
Zitat von @SuperSonic:
... jetzt nimmst du die Variable WoTa und setzt sie praktisch unten in die Robocopy commandline somit wird gleich der Aktuelle
Wochentag verwendet und ich muss mich nicht mehr mit meinem IF-Schleifen rumqäulen?
... jetzt nimmst du die Variable WoTa und setzt sie praktisch unten in die Robocopy commandline somit wird gleich der Aktuelle
Wochentag verwendet und ich muss mich nicht mehr mit meinem IF-Schleifen rumqäulen?
Genau das war das Wesentliche.
Skye hat es handwerklich noch etwas sauberer/sicherer gemacht in seiner Zeile
%RC_path% %Quelle% "C:\Montag_Freitag\%WoTa%" %Copy_MoFr%
Ebenso sollte auch der Parameter %Quelle% in Anführungszeichen geschrieben werden wegen eventueller Leerzeichen im Pfadnamen.
Das ist aber alles vergleichsweise kosmetisch - wesentlich war das Lernziel
"Sieben mögliche Usecases bedeuten nicht zwangsläufig sieben einzelne Sub-Prozeduren.
Wenn denn 5 Fälle (Mo-Fr) gleich zu behandeln sind und zwei andere Wochentage auch gleich (Sa+So), dann brauche ich keine 7 Variationen, sondern zwei."
Falls du dich unbedingt in IF -Verzweigungen üben willst -- ein IF-Fall wäre ja noch abzubilden.
Die Freitagssicherung ist ja - zumindest in deinem Eröffnungsbeitrag - eine Sonderlocke -> dafür fehlt noch ein IF-Konstrukt.
Grüße
Biber
Zitat von @Biber:
Die Freitagssicherung ist ja - zumindest in deinem Eröffnungsbeitrag - eine Sonderlocke -> dafür fehlt noch ein IF-Konstrukt.
Die Freitagssicherung ist ja - zumindest in deinem Eröffnungsbeitrag - eine Sonderlocke -> dafür fehlt noch ein IF-Konstrukt.
Aloha Biber,
ich hielt das eher für einen Fauxpas TEseits Ich bezweifle, dass er zweimal Donnerstag kopieren will er macht lieber neue Threads auf *fg*
greetz André
moin,
[OT]
Meinst du - sobald du das zu den anderen nach "Bätsch" verschiebst - kommt der von alleine?
Bin ich schon so vorhersehbar?
[/OT]
[1/2 OT]
André hats ja schon bemerkt, aber
[/1/2 OT]
Ich würd mir den ganzen Schmodder sparen, eine Hauptbatch (etwas mehr als einen 3Zeiler) zimmern, jeden Tag einen eigenen Schedjob anlegen, der gleich als Parameter Montaach;Dienstaach usw. mitliefert und den via %1 auswertet..
Ist aber wahrscheinlich viel zu einfach
Gruß
[OT]
Meinst du - sobald du das zu den anderen nach "Bätsch" verschiebst - kommt der von alleine?
Bin ich schon so vorhersehbar?
[/OT]
[1/2 OT]
André hats ja schon bemerkt, aber
set /a "TwoDigitYearMax=2038%%1000"
liefert bei mir schon ein € ins Sparschwein. Und man heute wirklich noch eine Batch bauen soll, die eventuell das aktuelle datum mit einer 19xx voranstellt?[/1/2 OT]
Ich würd mir den ganzen Schmodder sparen, eine Hauptbatch (etwas mehr als einen 3Zeiler) zimmern, jeden Tag einen eigenen Schedjob anlegen, der gleich als Parameter Montaach;Dienstaach usw. mitliefert und den via %1 auswertet..
Ist aber wahrscheinlich viel zu einfach
Gruß
grübel....
Also ausgerechnet unter Tux wo das mit dem Wochentag Schnickschnack ist?
BTW unter Tux heißt .net mono und weder das eine noch das andere braucht man für das problemchen.
Schade, dass du nicht auf die anderen Zeilen eingehst, Da Leg ich mich wieder hin.
Na ja,
T-Mos Jeden-Tag-einen-eigenen-Schedjob-anlegen-Lösung, kombiniert mit meinen Ausführungen bzgl "es gibt eigentlich nur 2 Usecases" führt doch zu den Schluss:
--> dann hast du doch dein 7-Wochentagsproblem auf zwei Fälle reduziert.
Du hast eine einzige Sourcecodestelle, in der du gegebenfalls den Wochentagermittlungsalgorithmus anpassen musst
( wegen unerwartet auftretendem Schaltjahr oder weil wir zur Euro-Rettung einen Wochentag mehr bekommen oder ähnlichem.)
--> die Pfleg- und Wartbarkeit ist gegeben.
Und du hast als zweites einen strunzdoofen Freitagsjob, dem du jedesmal als festen Parameter mitgibst, welcher Tag nun ist.
Ist doch um Welten besser als deine sieben IF-Jonglierbälle gleichzeitig in der Luft.
Grüße
Biber
T-Mos Jeden-Tag-einen-eigenen-Schedjob-anlegen-Lösung, kombiniert mit meinen Ausführungen bzgl "es gibt eigentlich nur 2 Usecases" führt doch zu den Schluss:
- wenn du einen Scheduler-Job anlegst für Montag bis Donnerstag (der den Wochentag ermitteln muss)
- und einen Scheduler-Job anlegst für Freitag, der nur Freitags startet und deshalb automatisch den Wochentag "Freitag" weiss
- und definitiv keinen Job anlegst, der Samstag und Sonntag läuft...
--> dann hast du doch dein 7-Wochentagsproblem auf zwei Fälle reduziert.
Du hast eine einzige Sourcecodestelle, in der du gegebenfalls den Wochentagermittlungsalgorithmus anpassen musst
( wegen unerwartet auftretendem Schaltjahr oder weil wir zur Euro-Rettung einen Wochentag mehr bekommen oder ähnlichem.)
--> die Pfleg- und Wartbarkeit ist gegeben.
Und du hast als zweites einen strunzdoofen Freitagsjob, dem du jedesmal als festen Parameter mitgibst, welcher Tag nun ist.
Ist doch um Welten besser als deine sieben IF-Jonglierbälle gleichzeitig in der Luft.
Grüße
Biber