Batch am Monatsende ausführen
Ich benutze Acronis um Backups von meinem Heimnetzwerk auszuführen. Bisher hatte ich als Tasks ein monatliches FullBackup am letzten Tag jeden Monats und einen Task für inkrementelle Backups jeden Tag.
Vor Durchführung des FullBackups konnte ich im Programm einstellen, dass ein Batch ausgeführt wird. Dieses erstellt mir einen Ordner mit dem Format "ArchivBackup_jjjjmm" und verschiebt dann alle vergangenen Backups in diesen Ordner.
Nach dem Upgrade von Acronis auf die Version 2011 geht dies nicht mehr (und der Support von Acronis ist zum k* schlecht, sorry) , dafür wurde ein ChainBackup eingeführt, welches FullBackup und anschließend inkrementelle in Serie durchführt. Allerdings (und dies ist leider nicht änderbar) nach einem Monat löscht dies die Backups bevor eine neue Chain erstellt wird.
Daher meine Frage:
Wie kann ich meine erwähnte Batchdatei erweitern, dass beim Chainbackup jedes mal vor Ausführung geprüft wird ob gerade der letzte Tag im Monat (oder noch besser, der letzte Freitag des Monats) ist.
Falls ja, so soll das Batch ausgeführt werden - falls nicht zutreffend, soll die unten angeführte Prozess für Ordnererstellung/Dateiverschiebung usw. übersprungen werden.
Bin für jede Hilfe und Tipps dankbar.
Vor Durchführung des FullBackups konnte ich im Programm einstellen, dass ein Batch ausgeführt wird. Dieses erstellt mir einen Ordner mit dem Format "ArchivBackup_jjjjmm" und verschiebt dann alle vergangenen Backups in diesen Ordner.
Nach dem Upgrade von Acronis auf die Version 2011 geht dies nicht mehr (und der Support von Acronis ist zum k* schlecht, sorry) , dafür wurde ein ChainBackup eingeführt, welches FullBackup und anschließend inkrementelle in Serie durchführt. Allerdings (und dies ist leider nicht änderbar) nach einem Monat löscht dies die Backups bevor eine neue Chain erstellt wird.
Daher meine Frage:
Wie kann ich meine erwähnte Batchdatei erweitern, dass beim Chainbackup jedes mal vor Ausführung geprüft wird ob gerade der letzte Tag im Monat (oder noch besser, der letzte Freitag des Monats) ist.
Falls ja, so soll das Batch ausgeführt werden - falls nicht zutreffend, soll die unten angeführte Prozess für Ordnererstellung/Dateiverschiebung usw. übersprungen werden.
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDATE=%%c%%b
echo %cdate%
md ArchivBackup_%cdate%
xcopy BackupM_P_Q_T.tib ArchivBackup_%cdate%
move *.tib ArchivBackup_%cdate%
del BackupM_P_Q_T.tib
net use
echo %cdate%
md ArchivBackup_%cdate%
xcopy BackupM_P_Q_T.tib ArchivBackup_%cdate%
move *.tib ArchivBackup_%cdate%
del BackupM_P_Q_T.tib
net use
Bin für jede Hilfe und Tipps dankbar.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161950
Url: https://administrator.de/forum/batch-am-monatsende-ausfuehren-161950.html
Ausgedruckt am: 25.12.2024 um 01:12 Uhr
33 Kommentare
Neuester Kommentar
Hallo,
auch wenn es nicht direkt die Antwort auf Deine Frage ist, aber ich habe ein Tool geschrieben, was wöchentlich das macht, was du willst und auch mit Acronis 2011 funktionieren müsste.
Übersichtlich Backups nach KWs speichern v1.2
Gruß
Marinux
auch wenn es nicht direkt die Antwort auf Deine Frage ist, aber ich habe ein Tool geschrieben, was wöchentlich das macht, was du willst und auch mit Acronis 2011 funktionieren müsste.
Übersichtlich Backups nach KWs speichern v1.2
Gruß
Marinux
Mit reinem Batch wirds aufwendig. Aber du könntest eine temponäre vbs datei erstellen lassen (durch die Batch Datei) und darin z.b. einen tag aufaddieren und dann wieder Ausgeben lassen. Diese Ausgabe fängst du mit einer For schleife ab und schaust ob der Tag "1" ist. Wenn ja dann ist heute der letzte Tag des Monats.
Allternativ legst du in der Batch ab welcher Monat wieviel Tage hat udn prüfst das eben mit dem aktuellen Datum ab.
Allternativ legst du in der Batch ab welcher Monat wieviel Tage hat udn prüfst das eben mit dem aktuellen Datum ab.
Moin miniversum,
na ja, das kommt auf die Strategie an.
Wenn der "Algorithmus" wirklich so einfach ist wie oben beschrieben, dann wäre doch der einmalige Aufwand bestenfalls
Und wenn denn das heutige Datum gleich einem der 12 "letzten Freitage" des Jahres ist --> siehe oben.
Hätte den Vorteil, dass du selbst den "letzten Freitag" ggf auf einen anderen Tag festlegen kannst,
z.B. den letzten Freitag im Dezember auf den 19.12. vorverlegen.
Grüße
Biber
na ja, das kommt auf die Strategie an.
Wenn der "Algorithmus" wirklich so einfach ist wie oben beschrieben, dann wäre doch der einmalige Aufwand bestenfalls
- einmalig pro Jahr von irgendeinem Schlecker-Reklamekalender alle "letzten Freitage" dieses Jahres abtippen als 12 Zeilen Text
- diese Textdatei in dem obigen Batch gegen das aktuelle Datum verglichen mit "FindStr" oder "Find".
Und wenn denn das heutige Datum gleich einem der 12 "letzten Freitage" des Jahres ist --> siehe oben.
Hätte den Vorteil, dass du selbst den "letzten Freitag" ggf auf einen anderen Tag festlegen kannst,
z.B. den letzten Freitag im Dezember auf den 19.12. vorverlegen.
Grüße
Biber
moin,
so schwer ist das in Batch nun auch wieder nicht.
Gruß Phil
so schwer ist das in Batch nun auch wieder nicht.
:: ----schnipp--- Letzten Freitag im Monat.cmd
@echo off&setlocal
for /f "tokens=2-4 delims=(-)" %%i in ('echo.^|date^|more +1') do for /f "tokens=1-3 delims=MoDiMFrSa.,:- " %%l in ('echo exit^|cmd /q /k"prompt $D"') do set "%%i=%%l" & set "%%j=%%m" & set "%%k=%%n"
echo "%JJ%"|findstr "[0-9][0-9][0-9][0-9]" >nul || set "JJ=20%JJ%"
set /a TT=100%TT%%%100,MM=100%MM%%%100
set /a z=14-MM,z/=12,y=JJ+4800-z,m=MM+12*z-3,dow=153*m+2
set /a dow=dow/5+TT+y*365+y/4-y/100+y/400-2472630,dow%%=7,dow+=1
:: 5 steht für Freitag, 0 für Montag, 7für Sonntag
if not %dow% equ 5 goto :eof
set /a "Februar = 22 + ( JJ / 4- ( JJ - 1 ) / 4 - ( JJ / 100 - ( JJ - 1 ) / 100) + ( JJ / 400 - ( JJ - 1 ) / 400 ) )"
if %MM% equ 2 if %TT% geq %Februar% goto :machweiter
set "OK="
for %%i in (1 3 5 7 8 10 12) do if %%i equ %MM% if %TT% geq 25 set "OK=1"
for %%i in (4 6 9 11) do if %%i equ %MM% if %TT% geq 24 set "OK=1"
if not defined OK goto :eof
:machweiter
:: hier kommt das auszuführende für den Letzten Freitag im Monat
echo letzter Freitag im Monat --- weiter gehts
pause
:: ----schnapp--- Letzten Freitag im Monat.cmd
Gruß Phil
dann nimmst Du am besten die GetAllDateTimeInfos.bat zur hilfe.
Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
ungefähr ein achtel runtescrollen und bei diesem Text ist diese zu holen
The Final Version 0.01 Beta -->Now Version 0.10 23.10.2008
dann ersetzt Du in dem oberen Script die Zeilen 03 und 04 mit dieser hier:
das sollte dann genügen.
Gruß Phil
Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
ungefähr ein achtel runtescrollen und bei diesem Text ist diese zu holen
The Final Version 0.01 Beta -->Now Version 0.10 23.10.2008
dann ersetzt Du in dem oberen Script die Zeilen 03 und 04 mit dieser hier:
GetAllDateTimeInfos /q /s
Gruß Phil
moin peter620,
aber so 50% sind noch keine 100%
Deine Systemsprache/Datumsformateinstellungen ist/sind warscheinlich so eingestellt, dass die GetAllDateTimeInfos.bat auch nicht das gewünschte Ergebnis bringt.
es ist ja noch ein bissel Zeit bis zum Monatsende, bis dahin biegen wir das noch hin.
Feuere mal folgende Zeile im CMD-Fenster ab und gib den Inhalt der Txt hiern als Ergebnis aus.
Gruß Phil
aber so 50% sind noch keine 100%
Deine Systemsprache/Datumsformateinstellungen ist/sind warscheinlich so eingestellt, dass die GetAllDateTimeInfos.bat auch nicht das gewünschte Ergebnis bringt.
es ist ja noch ein bissel Zeit bis zum Monatsende, bis dahin biegen wir das noch hin.
Feuere mal folgende Zeile im CMD-Fenster ab und gib den Inhalt der Txt hiern als Ergebnis aus.
(echo.|date&echo.---&echo.%date%)>"%userprofile%\desktop\DateInfo.txt"&&"%userprofile%\Desktop\Dateinfo.txt"
Gruß Phil
@miniversum
Bis zu
Bei Aufruf des Scripts mit Übergabe des zu untersuchenden Datums und des gesuchten Wochentages (So=1, ..., Sa=7) werden letzter Tag des Monats und letzter Tag des Monats, der auf den gesuchten Wochentag fällt, zurückgegeben ...
Grüße
bastla
Bis zu
Mit reinem Batch wirds aufwendig. Aber du könntest eine temponäre vbs datei erstellen lassen (durch die Batch Datei)
ginge ich ja noch konform , aber dann würde ich vielleicht doch eher zu folgendem Inhalt der VBS-Datei tendieren:Set a=WScript.Arguments:Heute=DateValue(a(0)):WoTag=a(1):Letzter=DateSerial(Year(Heute)-(Month(Heute)=12),Month(Heute) Mod 12+1,1)-1
WScript.Echo FormatDateTime(Letzter),FormatDateTime(Letzter-(Weekday(Letzter)+7-WoTag) Mod 7)
Grüße
bastla
so hier ist der Norske Batch
[Edit] ein t gesponsort [/Edit]
Gruß Phil
:: ----schnipp--- Siste fredag i måneden.cmd
@echo off&setlocal
for /f "tokens=2-4 delims=(-.)" %%i in ('echo.^|date^|more +1') do for /f "tokens=1-3 delims=." %%l in ("%date%") do set "%%i=%%l" & set "%%j=%%m" & set "%%k=%%n"
echo "%åå%"|findstr "[0-9][0-9][0-9][0-9]" >nul || set "åå=20%åå%"
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=åå+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
:: 5 steht für Freitag, 0 für Montag, 7 für Sonntag
if not %dow% equ 5 goto :Keinletzter
set /a "Februar = 22 + ( åå / 4- ( åå - 1 ) / 4 - ( åå / 100 - ( åå - 1 ) / 100) + ( åå / 400 - ( åå - 1 ) / 400 ) )"
if %mm% equ 2 if %dd% geq %Februar% goto :machweiter
set "OK="
for %%i in (1 3 5 7 8 10 12) do if %%i equ %mm% if %dd% geq 25 set "OK=1"
for %%i in (2 4 6 9 11) do if %%i equ %mm% if %dd% geq 24 set "OK=1"
if not defined OK goto :keinletzter
:machweiter
:: hier kommt das auszuführende für den Letzten Freitag im Monat
echo Sist fredag
pause
goto :eof
:keinletzter
:: hier kommt das was sonst ausgefuert wird hin
echo Ingen Sist fredag
pause
goto :eof
:: ----schnapp--- Siste fredag i måneden.cmd
[Edit] ein t gesponsort [/Edit]
Gruß Phil
Ich geb dir dann am 25.3. Bescheid um das Ganze auch wirklich in der Praxis funktioniert hat
das kannst Du (wenn Du willst) auch jetzt schon Testen.
Schließe alle Deine Programme wie Mail, Browser etc. - auf jedenfall diese, welche die Korrekte Zeit benutzten.
Öffnest Die CMD-Line fürs testen und machstn Test
Dann änderst Du das Datum unten in der Taskleiste oder in der Systemsteuerung und machst in der CMD-Line den Test weiter.
zum Schluss stellst Du das Datum wieder auf das Richtige.
Gruß Phil
ja jetzt ist mir auch klar woher das %1 in set "dd=%1" herkommt.
aber warum wird aus dem Kleinen L eine 1
liegt das am Norwegischen Alphabet?
Probiere mal statt der Zeile 04 diese Zeile
[Edit]
falls das auch nicht Fruchtet gehen wir wieder auf die Herkömmlichen Methoden zurück.
dabei ersetzt Du Zeile 04 bis einschliesslich Zeile 06 mit dieser Zeile:
[/Edit]
Gruß Phil
aber warum wird aus dem Kleinen L eine 1
liegt das am Norwegischen Alphabet?
Probiere mal statt der Zeile 04 diese Zeile
for /f "tokens=2-4 delims=(-.)" %%A in ('echo.^|date^|more +1') do for /f "tokens=1-3 delims=." %%D in ("%date%") do set "%%A=%%D" & set "%%B=%%E" & set "%%C=%%F"
[Edit]
falls das auch nicht Fruchtet gehen wir wieder auf die Herkömmlichen Methoden zurück.
dabei ersetzt Du Zeile 04 bis einschliesslich Zeile 06 mit dieser Zeile:
set /a dd=100%date:~-10,2%%%100,mm=100%date:~-7,2%%%100,åå=%date:~-4%
Gruß Phil
moin peter,
ich geb Dir mal die Antwort der Nachricht hierein.
für den Vormonatsordner zum Monatsanfang wäre das eventuell passend
[Edit] yae yes ... Year ausgebessert [/Edit]
[Edit2] Year->åå Fehler entfernt und Jahressicherung eingebaut.[\Edit]
Gruß Phil
ich geb Dir mal die Antwort der Nachricht hierein.
für den Vormonatsordner zum Monatsanfang wäre das eventuell passend
@echo off&setlocal
set /a dd=100%date:~-10,2%%%100,mm=100%date:~-7,2%%%100,åå=%date:~-4%
set /a Month=(mm+11)%%12
set /a X=1/Month >nul 2>nul||set /a åå-=1 , Month=12
if %Month% lss 10 set "Month=0%Month%
set "cDate=%åå%%Month%"
if %åå% equ %date:~-4% goto :NoYearBackup
if not exist "ArkivBackup_%åå%" goto :NoYearBackup
echo JahresBackupsicherung ....
md "ArkivBackup_%åå%"
for /d %%i in ("ArkivBackup_%åå%??") do move "%%i" "ArkivBackup_%åå%\"
echo JahresBackupsicherung fertig
:NoYearBackup
if not exist "ArkivBackup_%cdate%" goto :machs
echo nothing to do
goto :eof
:machs
echo made a Folder
md ArkivBackup_%cdate%
move *.tib ArkivBackup_%cdate%
[Edit] yae yes ... Year ausgebessert [/Edit]
[Edit2] Year->åå Fehler entfernt und Jahressicherung eingebaut.[\Edit]
Gruß Phil
moin peter,
für die fehlende "0" fügst Du diese Zeile nach der Zeile 05 ein:
wenn Du das Jahr im Ordnernamen weglässt - wer sorgt dann dafür das alte Backups Verschwinden?
sonst brauchst Du eine OrdnerÜberprüfung auf das ErstellungsDatum - womit wir gleich bei Deiner zweiten Frage sind....
es wird nicht Überprüft ob der 1. vom Monat ist. Stattdessen wird nur auf das vorhandensein des Ordners vom Vormonat geprüft - ist dieser noch nicht vorhanden ist folglich der 1. des Monats (oder das erste mal im Monat wo die Kiste an ist und die Batch ertmal überprüft)
wenn Du die Batch dennoch nur an einem 1. Ausführen willst- nimm das statt Zeile 08:
was natürlich Vorraussetzt, dass die Kiste wirklich jeden erten im Monat an ist.
Gruß Phil
für die fehlende "0" fügst Du diese Zeile nach der Zeile 05 ein:
if %Month% lss 10 set "Month=0%Month%
wenn Du das Jahr im Ordnernamen weglässt - wer sorgt dann dafür das alte Backups Verschwinden?
sonst brauchst Du eine OrdnerÜberprüfung auf das ErstellungsDatum - womit wir gleich bei Deiner zweiten Frage sind....
Wird das Batch eigentlich nur am 1. jeden Monats ausgeführt? Wo wird das denn bestimmt?
eben in Zeile 08, aber wenn das Jahr fehlt und die alten Ordner vom VorJahr auch noch Vorhanden sind wird es nicht funktionieren.es wird nicht Überprüft ob der 1. vom Monat ist. Stattdessen wird nur auf das vorhandensein des Ordners vom Vormonat geprüft - ist dieser noch nicht vorhanden ist folglich der 1. des Monats (oder das erste mal im Monat wo die Kiste an ist und die Batch ertmal überprüft)
wenn Du die Batch dennoch nur an einem 1. Ausführen willst- nimm das statt Zeile 08:
if %dd% equ 1 goto :machs
Gruß Phil
oben steht alles nachgetragen in der Batch + Jahressicherung Batch am ---> äähhmm Monatsanfang fürn Vormonat ausführen
Gruß Phil
Gruß Phil
moin peter,
die Variable åå sorgt in dem Fall für eine Fehlinterpretation des Datumformates - wobei man annimmt dieses Format wäre das Jahr zweistellig.
in Zeile 03. wird das Jahr aber eindeutig aus den letzten vier Zeichen aus der Variable "Datum" in die neue Variable eingetragen
sprich Du schiebst Dezember auch gleich in den Jahres Ordner -> dann ist es eventuell besser Zeile 09. bis Zeile 16. an das ende Der Batch zu setzen., damit der Dezember nicht auf der Platte vergammelt.
Gruß Phil
die Variable åå sorgt in dem Fall für eine Fehlinterpretation des Datumformates - wobei man annimmt dieses Format wäre das Jahr zweistellig.
in Zeile 03. wird das Jahr aber eindeutig aus den letzten vier Zeichen aus der Variable "Datum" in die neue Variable eingetragen
set /a ( ... ) åå=%date:~-4%
Die Kiste ist immer an und gegen Ende jedes Jahres verschiebe ich die Monatsordner in einen Jahresordner.
das Erledigt dir Zeile 09. bis Zeile 16. ( aber erst im neuen Jahr, wenn dieser JahresOrdner noch nicht erstellt wurde)Zitat von @peter620:
Jahresbackup an sich mache ich nicht. Das letzte volle Backup des Jahres erkläre ich automatisch zum Jahresbackup.
Jahresbackup an sich mache ich nicht. Das letzte volle Backup des Jahres erkläre ich automatisch zum Jahresbackup.
Gruß Phil