theunix
Goto Top

Tägliche Vollsicherung per Batch Xcopy

Hallo Liebe Profis,

Ich habe das Problem mit meinem Sicherungsscript's !

Ich wollte per Xcopy für meinem DATEV Ordner einen sicherung machen und zwar so , dass es Täglich die Woche (7 Tage) den Ordner DATEV in eine Freigabe kopiert und zwar ohne jegliche Eingriffe.
Dies klappt soweit , allerdings möchte mein Vorgesetzter so, dass es jeden Tag Mo-So so aussehen soll:

Mo : soll der Ordner mit '1' gekennzeichnet werden oder mit 'Mo'
Di : soll mit '2' oder 'Di'

und dass ganze soll von MO-SO gekennzeichnet werden .

Wenn es wieder Montag ist soll es nur die änderungen überschrieben werden qwasie (Inkrementell) und dies für Mo-SO.


Bitte um euer Hilfe.

Meine Script sieht folgendermaßen aus :

net stop MSSQL$DATEV_DBENGINE /y
REM SICHERUNG

net use Q: \\dc1\SRV0004 /persistent:no
xcopy "C:\DATEV" Q:\Datev /c /d /e /h /i /k /q /r /s /x /y
net use Q: /delete


net start MSSQL$DATEV_DBENGINE
net start SQLAgent$DATEV_DBENGINE

Content-Key: 233468

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

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: Dirmhirn
Dirmhirn 24.03.2014 aktualisiert um 11:23:23 Uhr
Goto Top
Hi Tokksoy

sie dir mal die MIR Option von Robocopy an + viele weitere.
auch das mit den Ordner kann Robocopy glaube ich out-of-the-box.

ist ab Win Vista bei Windows incl. sonst einfach runterladen.

kannst dann auch direkt auf \\dc1\SRV0004 zugreifen ohne share.

sg Dirm
Mitglied: theunix
theunix 24.03.2014 um 11:40:22 Uhr
Goto Top
Hallo Dirmhirn,

vielen Dank für's schnelle Antwort.

Ich verstehe absolut die MIR option nicht. bzw. Robocopy.

Wie gut ist meine Script? und kann ich da nicht mit parametern sagen wie oben beschrieben Mo einen ORdner DI einen Ordner , so dass es mir autom. anlegt?
Mitglied: Dirmhirn
Dirmhirn 24.03.2014 um 12:00:44 Uhr
Goto Top
Hi Toksoy,

die MIR Option spiegelt (mirror) ein Verzeichnis, d.h. löschst du im Source Folder eine Datei, dann wird sie auch im Destination Folder gelöscht.

dachte Robocopy hätte eine "Keep x Backups" Funktion - grad nicht gefunden.

aber mit einer einfachen Batch Variable, in der du den jeweiligen Wochentag abspeicherst und diese an den Dest Pfad hängst, kannst du dir das mit Robocopy basteln.

da du Systemadministrator angegeben hast, ließ dir die robocopy /? Hilfe durch und bastel dir ein Skript.

wenn's Probleme gibt dann frag hier und bitte code immer in < code> < / code>

wenn dir das mit den Wochentagen und IF zu kompliziert ist, dann mach halt 7 Tasks und für jeden eine Batchdatei. ist halt aufwendiger wenn du etwas ändern willst.

sg Dirm
Mitglied: bastla
bastla 24.03.2014 aktualisiert um 12:17:07 Uhr
Goto Top
Hallo toksoy!

Unabhängig von der Frage, ob nicht tatsächlich "robocopy" das sinnvollere Werkzeug wäre, ein Ansatz, um den Wochentag als laufende Nummer von 1 (Mo) bis 7 (So) in der Variablen %WtNr% zu erhalten:
>"%temp%\GetWdN.vbs" echo WScript.Echo Weekday(WScript.Arguments(0),2)  
for /f %%i in ('cscript //nologo "%temp%\GetWdN.vbs" %date%') do set /a WtNr=%%i  
Es wird hier einfach durch den Batch ein kleines VBScript erzeugt, das den entsprechenden Wert an den Batch zurückliefert.

Grüße
bastla
Mitglied: Endoro
Endoro 24.03.2014 um 13:15:36 Uhr
Goto Top
Hey,
der Wochentag ohne Basic:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "DOWs=MODIMIDOFRSASO"  
FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a*2  
CALL SET "DOW=%%DOWs:~%DayOfWeek%,2%%"  
ECHO(%DOW%
Gruss Endoro.
Mitglied: Pago159
Pago159 25.03.2014 aktualisiert um 09:49:53 Uhr
Goto Top
Hi Endoro,
deine Batch gibt immer meinen Tag später an face-wink ich habe das mal eben schnell angepasst:

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "DOWs=MODIMIDOFRSASO"  
FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a*2-2  
CALL SET "DOW=%%DOWs:~%DayOfWeek%,2%%"  
ECHO(%DOW%

Pause

Gruß Pago
Mitglied: theunix
theunix 25.03.2014 aktualisiert um 10:28:53 Uhr
Goto Top
Hallo Dirmhirn !

danke für die schnelle Antwort.
ich hatte es mir auch mit 7 Tasks vorgestellt aber ist viel zu aufwändig.

Es geht mir ja um Wochentage..... und das bekomme ich nicht hin!!
Mitglied: theunix
theunix 25.03.2014 um 10:31:34 Uhr
Goto Top
Lieben Dank Endoro und Pago,

ich verstehe bloss nicht wo ich die Zeilen Eintragen Soll , sollte ich meinem batch lassen und anschließend diesen batch eintragen ?
Weil hier ja keine Quell und Ziel adresse etc. Angegeben sind.

Bitte um Hilfe..


Gruß Toksoy
Mitglied: Endoro
Endoro 25.03.2014, aktualisiert am 26.03.2014 um 11:30:41 Uhr
Goto Top
Hey @Pago159

Zitat von @Pago159:

Hi Endoro,
deine Batch gibt immer meinen Tag später an face-wink ich habe das mal eben schnell angepasst:
da könnte jetzt -2 rauskommen, ich würde lieber die Wochentage umsortieren:
@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "DOWs=SOMODIMIDOFRSA"  
FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a*2  
CALL SET "DOW=%%DOWs:~%DayOfWeek%,2%%"  
ECHO(%DOW%
Gruss Endoro.
Mitglied: theunix
theunix 26.03.2014 aktualisiert um 11:37:00 Uhr
Goto Top
Hallo Endoro und etc.,

Ich bekomme es nicht hin.

Bitte gibt mir eine konkrete Lösung wie ich es ausführen kann bzw. wie die batch datei aussehen soll.

Mfg Toksoy
Mitglied: Pago159
Pago159 26.03.2014 aktualisiert um 17:17:50 Uhr
Goto Top
Hiermit erstellst du einen Ordner Datev und darunter dann die Ordner Mo - Di - Mi - Do - Fr - Sa - So
Die Xcopy Parameter habe ich mir jetzt nicht angeschaut, denke aber mal, dass du dich damit beschäftigt hast und lasse sie deshalb so stehen.

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "DOWs=SOMODIMIDOFRSA"  
FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a*2  
CALL SET "DOW=%%DOWs:~%DayOfWeek%,2%%"  

net stop MSSQL$DATEV_DBENGINE /y
REM SICHERUNG

net use Q: \\dc1\SRV0004 /persistent:no
If not exist "Q:\DATEV\%DOW%_Sicherung" mkdir "Q\DATEV\%DOW%_Sicherung"  
xcopy "C:\DATEV" Q:\DATEV\%DOW%_Sicherung\ /c /d /e /h /i /k /q /r /s /x /y  
net use Q: /delete


net start MSSQL$DATEV_DBENGINE
net start SQLAgent$DATEV_DBENGINE
Mitglied: Pago159
Lösung Pago159 26.03.2014, aktualisiert am 31.03.2014 um 09:46:40 Uhr
Goto Top
Hey Endoro,
das wäre zu einfach gewesen, den Sonntag an den Anfang zu setzen :-P ist aber natürlich eine bessere lösung face-wink

Lg Pago
Mitglied: theunix
theunix 27.03.2014 um 10:31:46 Uhr
Goto Top
Hallo Pago159,

vielen Lieben Dank für die schnelle und ausführliche ergebnis.
werde es gleich ausprobieren.

Mfg Toksoy
Mitglied: theunix
theunix 31.03.2014 um 09:52:11 Uhr
Goto Top
Gruß an alle,

also erstmals vielen Lieben Dank für die Hilfe !!

ich möchte auch mal das Ergebnis beitragen die ich ordnungsgemäß hinbekommen habe und zwar, (endlich) so wie es auch mein Vorgesetzte es möchte.

 net stop MSSQL$DATEV_DBENGINE /y
 REM SICHERUNG
 net use Q: \\dc1\Datev /persistent:no
 SET "DOWs=MODIMIDOFRSASO"  
 FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a*1  
 CALL SET "DOW=%%DOWs:~%DayOfWeek%,2%%"   
 xcopy "C:\Datev\*.*" "Q:\Datev\%DayofWeek%" /c /d /e /h /i /k /q /r /s /x /y  
 net use Q: /delete /yes
 net start MSSQL$DATEV_DBENGINE
 net start SQLAgent$DATEV_DBENGINE
Mitglied: Endoro
Endoro 31.03.2014 um 12:29:28 Uhr
Goto Top
Hey, wenn du die Nummer des Wochentages als Ordnernamen nimmst, kannst du die Rechnungen mit "MODI..." weglassen:
 net stop MSSQL$DATEV_DBENGINE /y
 REM SICHERUNG
 net use Q: \\dc1\Datev /persistent:no
 FOR /f %%a IN ('WMIC PATH Win32_LocalTime GET DayOfWeek^|FINDSTR [0-6]') DO SET /a DayOfWeek=%%a  
 xcopy "C:\Datev\*" "Q:\Datev\%DayofWeek%" /c /d /e /h /i /k /q /r /s /x /y  
 net use Q: /delete /yes
 net start MSSQL$DATEV_DBENGINE
 net start SQLAgent$DATEV_DBENGINE
Gruss, Endoro.