peter620
Goto Top

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.

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

Bin für jede Hilfe und Tipps dankbar.

Content-ID: 161950

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

Printed on: December 10, 2024 at 15:12 o'clock

marinux
marinux Mar 03, 2011, updated at Oct 18, 2012 at 16:46:02 (UTC)
Goto Top
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
peter620
peter620 Mar 03, 2011 at 10:00:11 (UTC)
Goto Top
Danke, ich sehs mir mal an. Sieht aber auf den ersten Blick aufwändiger aus, als einfach meine batch zu ergänzen - schliesslich müsste die erstelle Serie nur an einem bestimmten Tag in einen anderen Ordner verschoben werden.
Warum Acronis das nicht ins Programm eingebaut, sondern automatisch löscht, hat ist mir echt schleierhaft. Backups hat man schliesslich nicht um sie zu löschen, sondern um sie zu behalten...
miniversum
miniversum Mar 03, 2011 at 11:49:50 (UTC)
Goto Top
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.
peter620
peter620 Mar 03, 2011 at 11:54:28 (UTC)
Goto Top
Könnte das Ganze vereinfacht werden, wenn ich das immer an einem festen Tag mache, also zum Beispiel immer der erste jeden Monats?
Biber
Biber Mar 03, 2011 at 11:59:02 (UTC)
Goto Top
Moin miniversum,

Zitat von @miniversum:
Mit reinem Batch wirds aufwendig.
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
peter620
peter620 Mar 03, 2011 at 12:19:27 (UTC)
Goto Top
Eben, wie schon erwähnt: wa¨re es nicht einfacher immer am 27. eines Monats dies ausführen zu lassen (jeder Monat hat 27 Tage).

Wie müsste mein Batch ergänzt werden? (Bin leider nicht so gut auf dem Feld...).
pieh-ejdsch
pieh-ejdsch Mar 03, 2011 at 12:36:49 (UTC)
Goto Top
moin,

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
miniversum
miniversum Mar 03, 2011 at 12:47:26 (UTC)
Goto Top
Und jeder erste des Monate wäre einfach:
if "%date:~0,2%" equ "01" echo erster
Ist aber abhängig vom eingestellten Datumsformat, bzw. der Reihenfolge
peter620
peter620 Mar 03, 2011 at 13:40:09 (UTC)
Goto Top
Habs ausprobiert, aber da bekomme ich einen Syntaxfehler. Irgendwo scheint der Wurm drin zu sein.

Liegt das daran, dass delims=MoDiMFrSa. ist? Fehlt z.B. der Do
pieh-ejdsch
pieh-ejdsch Mar 03, 2011 at 13:55:01 (UTC)
Goto Top
Bei mir gehts.

stell mal auf "echo on" und führe die Batch in einem offenen CMD Fenster auf
peter620
peter620 Mar 03, 2011 at 14:47:13 (UTC)
Goto Top
Beim ausführen erhalte ich im cmd-Fenster (nicht über dd.mm.åå wundern, das OS hat eine andere Sprache)
set "dd.mm.åå=%1"   & set " =03"   & set "2011"  

zweimal einen Syntaxfehler; danach gehts mit folgendem normal weiter:
echo "20"  | findstr "[0-9][0-9][0-9][0-9]"   1>nul  || set "JJ=2020"  
usw.

Der Rest scheint zu funktionieren.
pieh-ejdsch
pieh-ejdsch Mar 03, 2011 at 15:15:06 (UTC)
Goto Top
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:
GetAllDateTimeInfos /q /s
das sollte dann genügen.

Gruß Phil
peter620
peter620 Mar 04, 2011 at 08:39:28 (UTC)
Goto Top
Wow, danke Phil für deine tolle Unterstützung. "Letzten Freitag im Monat.cmd" läuft jetzt.

Allerdings bekomme ich 3 Syntaxfehler im GetAllDateTimeInfos.bat

Im cmd
Zeile 21: set "=2011"
Zeile 29: set " =03"
Zeile 30: set "=2011"
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 09:40:38 (UTC)
Goto Top
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. face-wink

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
Biber
Biber Mar 04, 2011 at 09:42:24 (UTC)
Goto Top
Moin peter620,

Allerdings bekomme ich 3 Syntaxfehler im GetAllDateTimeInfos.bat

Dann teste bitte die GetAllDatTimeInfos.cmd mal trocken vom CMD-Prompt aus (einfach ohne Parameter) und poste die Ausgabe.

Und poste bitte auch mal die Ausgabe von
echo %date% %time%
am CMD-Prompt.

Grüße
Biber
peter620
peter620 Mar 04, 2011 at 11:15:33 (UTC)
Goto Top
@ Phil:
Eingabe von (echo.|date&echo.---&echo.%date%) ergibt (übersetzt natürlich, auf deutsch wahrscheinlich leicht abweichend - aber ihr versteht sicher was gemeint ist ;) )
Gültiges Datum ist: 04.03.2011
Neues Datum angeben: (dd.mm.yy)
---
04.03.2011

@Biber
Die 3 oben beschriebenen Syntaxfehler tauchen auf wenn ich nur GetAllDateTimeInfos.bat ausführe (ohne letzten Freitag im Monat.cmd)

echo %date% %time% ergibt
04.03.2011 12:08:22,69
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 11:24:04 (UTC)
Goto Top
ist die Zeile 02 nun exakt so aus der "DateInfo.txt" entnommen oder hast Du die hier Verändert reingestellt?

Verfälschte Angaben führen zu Inkorrekten Ergebnissen.
peter620
peter620 Mar 04, 2011 at 11:33:49 (UTC)
Goto Top
Sorry, jetzt hab ich nicht mitgedacht (mein Kleiner hat mich die ganze Nacht wach gehalten...).
Wortwörtlich ist die CMD-Ausgabe:
Gjeldende dato er: 04.03.2011
Skriv ny dato: (dd.mm.åå)
---
04.03.2011
bastla
bastla Mar 04, 2011 at 11:34:33 (UTC)
Goto Top
@miniversum
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 face-wink, 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)
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
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 11:56:03 (UTC)
Goto Top
so hier ist der Norske Batch

:: ----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
peter620
peter620 Mar 04, 2011 at 12:20:12 (UTC)
Goto Top
SUPER! DANKE!
Nur ein kleiner Fehler in Zeile 11 musste ausgemerzt werden

if not %dow% equ 5 goto :Keinletzter

Ich geb dir dann am 25.3. Bescheid um das Ganze auch wirklich in der Praxis funktioniert hat face-smile
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 12:33:53 (UTC)
Goto Top
Ich geb dir dann am 25.3. Bescheid um das Ganze auch wirklich in der Praxis funktioniert hat face-smile

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
peter620
peter620 Mar 04, 2011 at 12:47:13 (UTC)
Goto Top
Hmm face-sad
Hab das Datum auf den letzten Freitag im März eingestellt, also den 25.3. Im cmd sieht das so aus:
for /F "tokens=1-3 delims=." %1 in ("25.03.2011") do set "dd=%1" & set "mm=%m & set "åå=%n"

Trotzdem endet das Ganze dann mit
Ingen Siste fredag
pause
goto :eof
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 13:00:11 (UTC)
Goto Top
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
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%
[/Edit]


Gruß Phil
peter620
peter620 Mar 04, 2011 at 14:51:03 (UTC)
Goto Top
YESYESYES! 1000 Dank. Wohin darf ich dir die Blumen schicken?
Das mit dem kleinen L und der 1 war ein Schreibfehler (hab diese eine Zeile nur abgetippt). Dein erster Vorschlag für die Zeile 04 hat nicht funktioniert, aber der 2. Vorschlag für die Zeilen 04-06! Der funktionierende Code sieht also wie folgt aus:

:: ----schnipp--- Siste fredag i måneden.cmd
@echo off&setlocal

set /a dd=100%date:~-10,2%%%100,mm=100%date:~-7,2%%%100,åå=%date:~-4%
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
pieh-ejdsch
pieh-ejdsch Mar 04, 2011 at 15:09:58 (UTC)
Goto Top
siehst Du - Schreibfehler passiert mir auch andauernd. face-wink

ach ja die Blumen - ins Dreiländereck "Deutschland-Tschechei-Polen" - aber bitte auf die deutsche Seite. Danke

Gruß Phil
pieh-ejdsch
pieh-ejdsch Mar 31, 2011 at 17:19:29 (UTC)
Goto Top
moin peter,

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
peter620
peter620 Apr 01, 2011 at 08:21:26 (UTC)
Goto Top
Danke. In Zeile 5 ist ein Buchstabendreher im Wort "Year".
Es funktioniert, nur der Monat wird nur noch mit einer Ziffer ausgegeben, nicht mehr mit 2. Ich hätte also gerne "ArkivBackup_03" anstatt "ArkivBackup_3".

Wird das Batch eigentlich nur am 1. jeden Monats ausgeführt? Wo wird das denn bestimmt?
pieh-ejdsch
pieh-ejdsch Apr 01, 2011 at 11:56:34 (UTC)
Goto Top
moin peter,

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
was natürlich Vorraussetzt, dass die Kiste wirklich jeden erten im Monat an ist.


Gruß Phil
peter620
peter620 Apr 01, 2011 at 12:46:50 (UTC)
Goto Top
Super, danke.

Die Kiste ist immer an und gegen Ende jedes Jahres verschiebe ich die Monatsordner in einen Jahresordner. Dies verbinde ich immer mit einem "Aufräumen", d.h. alte inkrementelle Backups werden gelöscht, mir reichen dann die monatlichen Hauptbackups. Darum habe ich nicht daran gedacht dies zu automatisieren.

Dementsprechend hast du recht: es reicht zu testen ob der Vormonatsordner bereits erstellt wurde.
Danke, jetzt funktioniert es wirklich wie es soll face-smile

EDIT:
Ha, Irrtum. Meine Ordner hatten bisher immer das Format ArkivBackup_201104 - also ArkivBackup_ååååmm. Das batch gibt aber für cdate nur "mm" aus.
pieh-ejdsch
pieh-ejdsch Apr 01, 2011 at 16:41:31 (UTC)
Goto Top
oben steht alles nachgetragen in der Batch + Jahressicherung Batch am ---> äähhmm Monatsanfang fürn Vormonat ausführen

Gruß Phil
peter620
peter620 Apr 04, 2011 at 07:06:05 (UTC)
Goto Top
Hmm, bin mir nicht sicher ob ich jetzt missverstanden wurde. Ich mache jeden Monat einen Ordner im Format ååååmm (also yyyymm auf englisch).

Jahresbackup an sich mache ich nicht. Das letzte volle Backup des Jahres erkläre ich automatisch zum Jahresbackup.
pieh-ejdsch
pieh-ejdsch Apr 04, 2011 at 10:12:37 (UTC)
Goto Top
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
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.
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. face-wink

Gruß Phil