Batch Variable mit Kalenderwoche oder ähnliches
Im Rahmen eines Backupscripts brauch ich eine Variable, die eine Woche lang den gleichen Wert hat und danach um eins höher ist also z.B.:
05.01.09 - 11.01.09 -> %woche% = 1
12.01.09 - 18.01.09 -> %woche% = 2
19.01.09 - 25.01.09 -> %woche% = 3
...
Spontan habe ich überlegt die Kalenderwoche zu nehmen (da die Tatsache dass sie nach ein Jahr von vorne losgehen irelevant ist), allerdings habe ich keine Möglichkeit gefunden die Kalenderwoche auszugeben.
Also habe ich überlegt ob es eine Variable wie "tage/stunden/secunden seid der Unixzeit", gibt dabei ist mir aufgefallen das es im Batch eigentlich nur %time% und %date% gibt.
Da ich die Ausgabe von %date% leider nicht direkt verwenden kann müsste ich sie also irgend wie so umwandeln das sie mir die Anzahl der Montage bzw. Sonntage seit Datum xy ausgibt. Dies übersteigt allerdings meine Fähigkeiten ...
Kann mir also jemand von euch zeigen wie ich sowas realisieren kann, oder kennt jemand von euch einen einfacherren Lösungweg als meine Idee?
Vielen Dank schon mal
05.01.09 - 11.01.09 -> %woche% = 1
12.01.09 - 18.01.09 -> %woche% = 2
19.01.09 - 25.01.09 -> %woche% = 3
...
Spontan habe ich überlegt die Kalenderwoche zu nehmen (da die Tatsache dass sie nach ein Jahr von vorne losgehen irelevant ist), allerdings habe ich keine Möglichkeit gefunden die Kalenderwoche auszugeben.
Also habe ich überlegt ob es eine Variable wie "tage/stunden/secunden seid der Unixzeit", gibt dabei ist mir aufgefallen das es im Batch eigentlich nur %time% und %date% gibt.
Da ich die Ausgabe von %date% leider nicht direkt verwenden kann müsste ich sie also irgend wie so umwandeln das sie mir die Anzahl der Montage bzw. Sonntage seit Datum xy ausgibt. Dies übersteigt allerdings meine Fähigkeiten ...
Kann mir also jemand von euch zeigen wie ich sowas realisieren kann, oder kennt jemand von euch einen einfacherren Lösungweg als meine Idee?
Vielen Dank schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105150
Url: https://administrator.de/forum/batch-variable-mit-kalenderwoche-oder-aehnliches-105150.html
Ausgedruckt am: 23.12.2024 um 14:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo madmad und willkommen im Forum!
Darf ich Dich zum Thema "Kalenderwoche" gleich zum diesbezüglichen Standardwerk (mindestens für den deutschsprachigen Raum ) von Workshop Batch for Runaways Part III Datums- und Zeitvariablen im Batch ...
Solltest Du es sehr eilig haben:
Zum Testen kannst Du %date% in der Zeile 4 auch durch eine Datumsangabe im Format "TT.MM.JJJJ" ersetzen.
Grüße
bastla
Darf ich Dich zum Thema "Kalenderwoche" gleich zum diesbezüglichen Standardwerk (mindestens für den deutschsprachigen Raum ) von Workshop Batch for Runaways Part III Datums- und Zeitvariablen im Batch ...
Solltest Du es sehr eilig haben:
@echo off & setlocal
set G=%temp%\GetWeek.vbs
>%G% echo WScript.Echo Datepart("ww",WScript.Arguments(0),2)
for /f %%i in ('cscript //nologo %G% %date%') do set KalWo=%%i
echo %KalWo%
Grüße
bastla
KalenderWoche (Mo-So) per Batch
@ECHO OFF
setlocal
chcp 1252>nul
REM KalenderWoche (Mo-SO)
REM Datum
set /A d=%date:~0,2%
set /A m=%date:~3,2%
set /A y=%date:~6,4%
REM Tag des Jahres
if %m% == 1 set /A DoY=d
if %m% == 2 set /A DoY=d+31
if %m% == 3 set /A DoY=d+59
if %m% == 4 set /A DoY=d+90
if %m% == 5 set /A DoY=d+120
if %m% == 6 set /A DoY=d+151
if %m% == 7 set /A DoY=d+181
if %m% == 8 set /A DoY=d+212
if %m% == 9 set /A DoY=d+243
if %m% == 10 set /A DoY=d+273
if %m% == 11 set /A DoY=d+304
if %m% == 12 set /A DoY=d+334
REM Schaltjahr?
set /A LY=(y/4)*4
if %y% NEQ %LY% goto noLY
if %m% GTR 2 set /A DoY=DoY+1
:noLY
REM Tag der Woche (Sonntag = 0)
for /f %%g in ('wmic path win32_localtime get dayofweek^|findstr /v /r "^$"') do (set DoW=%%g)
REM (Sonntag = 7)
if %DoW% == 0 set /A DoW=7
REM KW
set /A nSd=DoY+(7-DoW)
set /A KW=nSd/7
set /A delta=nSd-(KW*7)
if %delta% GTR 3 set /A KW=KW+1
REM führedne Null
if %KW% LSS 10 set O=0
echo.KW = %O%%KW%
PAUSE
chcp 850>nul
endlocal
EXIT
Vorgehen:
Tag des Jahres berechnen ,im falle von von Schaltjahren +1 (ab März).
Tag des Jahres zum nächsten Sonntag "aufrunden" und Anzahl der ganzen Wochen berechnen (Batch rundet ja immer ab).
Delta (Tage von Jahresbeginn zu Wochenanfang) berechnen, wenn Delta > 3 dann Wochen+1 (weil dann die angefangene ja Woche mitzählt).
Führende 0 einfügen wenn KW < 10.
Es bleibt der Makel von KW = 00 z.B. für die ersten 3 Tage diesen Jahres.
Wenn ich mal wieder Langeweile habe wird dann KW 52/53 und als zusätzliche Information das Vorjahr angezeigt.
Tag des Jahres berechnen ,im falle von von Schaltjahren +1 (ab März).
Tag des Jahres zum nächsten Sonntag "aufrunden" und Anzahl der ganzen Wochen berechnen (Batch rundet ja immer ab).
Delta (Tage von Jahresbeginn zu Wochenanfang) berechnen, wenn Delta > 3 dann Wochen+1 (weil dann die angefangene ja Woche mitzählt).
Führende 0 einfügen wenn KW < 10.
Es bleibt der Makel von KW = 00 z.B. für die ersten 3 Tage diesen Jahres.
Wenn ich mal wieder Langeweile habe wird dann KW 52/53 und als zusätzliche Information das Vorjahr angezeigt.
Hallo RoadRacer82.
Der Thread ist uralt und das Problem ist rein mathematisch und wurde längst gelöst.
ritchielawrence.github.io/batchfunctionlibrary/
Grüße
rubberman
Der Thread ist uralt und das Problem ist rein mathematisch und wurde längst gelöst.
ritchielawrence.github.io/batchfunctionlibrary/
@echo off &setlocal
set /a "yy=2016,mm=10,dd=23"
call :DateToWeek %yy% %mm% %dd% yn cw dw
echo Jahr %yn%
echo Woche %cw%
echo Tag der Woche %dw%
pause
exit /b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:DateToWeek %yy% %mm% %dd% yn cw dw
::
:: By: Ritchie Lawrence, Updated 2002-11-20. Version 1.1
::
:: Func: Returns an ISO 8601 Week date from a calendar date.
:: For NT4/2000/XP/2003.
::
:: Args: %1 year component to be converted, 2 or 4 digits (by val)
:: %2 month component to be converted, leading zero ok (by val)
:: %3 day of month to be converted, leading zero ok (by val)
:: %4 var to receive year, 4 digits (by ref)
:: %5 var to receive calendar week, 2 digits, 01 to 53 (by ref)
:: %6 var to receive day of week, 1 digit, 1 to 7 (by ref)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (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,Jd=153*m+2
set /a Jd=Jd/5+dd+y*365+y/4-y/100+y/400-32045
set /a y=yy+4798,Jp=y*365+y/4-y/100+y/400-31738,t=Jp+3,Jp=t-t%%7
set /a y=yy+4799,Jt=y*365+y/4-y/100+y/400-31738,t=Jt+3,Jt=t-t%%7
set /a y=yy+4800,Jn=y*365+y/4-y/100+y/400-31738,t=Jn+3,Jn=t-t%%7
set /a Jr=%Jp%,yn=yy-1,yn+=Jd/Jt,yn+=Jd/Jn
if %Jd% GEQ %Jn% (set /a Jr=%Jn%) else (if %Jd% GEQ %Jt% set /a Jr=%Jt%)
set /a diff=Jd-Jr,cw=diff/7+1,wd=diff%%7,wd+=1
if %cw% LSS 10 set cw=0%cw%
endlocal&set %4=%yn%&set %5=%cw%&set %6=%wd%&goto :EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rubberman