blueberry
Goto Top

Kalenderwoche ausrechnen

Hallo Zusammen,

Ich muss eine Batchdatei schreiben, die die Kalenderwoche ausgibt. Ich habe schon den grössten Teil herausgefunden wie ihr unten sehen könnt.
Aber es ist noch nicht ganz richtig, wie muss ich das Jahr noch einbeziehen, damit ich die richtige Wochenzahl bekomme?
Ich danke jetzt schon mal für eure Antworten.

@echo OFF

SET /P DATUMA=Geben Sie das Datum ein (DD:MM:JJJJ):

SET RECHNUNG=%DATE:~0,2%.%DATE:~3,2%.%DATE:~6,0%

FOR /F "TOKENS=1,2 DELIMS=. " %%A IN ("%DATUMA%") DO (
SET /A DD=%%A
SET /A MM=%%B )
SET /A DATUMB=%DD%/7+%MM%*4
CLS
ECHO %DATUMB%
PAUSE


Mit freundlichen Grüssen

Blueberry

Content-Key: 98330

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

Printed on: April 24, 2024 at 15:04 o'clock

Member: paulepank
paulepank Oct 02, 2008 at 12:43:21 (UTC)
Goto Top
Hallo Sandro,

Ich muss eine Batchdatei schreiben
als Informatiker hast du doch ganz andere Möglichkeiten.
Wenn du wirklich mußt und ohne zusätzliche Hilfe eines anderen Programms dann viel Vergnügen.
Da gleich das Wochenende beginnt, mein Tipp:

Nimm date aus dem Paket unxutils und baue das in deine Lösung ein.
Am Prompt:
.\date +%W
ergibt für heute eine 39

cu paulepank
Member: Blueberry
Blueberry Oct 02, 2008 at 13:03:21 (UTC)
Goto Top
Hallo Paulepank,

Erst mal Danke viel mal für den Tipp.
Ich bin 16 (14.10 werde ich 17 JUHU ) und bin im ersten Lehrjahr als Informatiker.
Da mein Lehrmeister sehr begeistert von Batch-Dateien ist und ich dazu noch nicht viel Ahnung davon habe, hat er mir Batch-Aufgaben gegeben.
Und ich habe die Lösung schon fast... Ich stell die mal rauf, wenn ich sie fertig habe (geht ca. 30 bis 60 min, denke ich mal so, aus dem Bauch heraus
). Ich hoffe du schaust dir meine Lösung an und kannst mir ein Feedback geben, da ich Feedbacks (Positive UND Negative) sehr gut finde.

Gruss

Sandro
Member: Biber
Biber Oct 02, 2008, updated at Oct 18, 2012 at 16:36:20 (UTC)
Goto Top
Moin blueberry,

unterschätz den Berechungsaufwand für die Kalenderwoche nicht.
Du brauchst, egal welchen der 27000 möglichen Algorithmen Du verwendest, IMHO immer die Information "Welcher Wochentag war/ist am 1.Januar des fraglichen Jahres"?
Gute Nachricht I: Das kannst Du per Batch ermitteln (es existieren Beispiele dafür)
Gute Nachricht II
Wenn Du erstmal den Wochentag hast, dann ist der Rest einfach.
Zitat aus der Anleitung, die unter "Anleitungen zum Thema" weiter unten steht:
Die skizzierte Mimik mit puren CMD-Befehlen ist wie folgt:

.. Datum ermitteln aus %date%
.. Datum entsprechend dem vorgefundenen aufdröseln in Tag, Monat, Jahr, Wochentag
.. Zwischenberechnung des TagDesJahres (abgespeckte Variante hatte ich mal skizziert unter
Laufender Tag im Jahr und Zähler
.. KW berechnen als SET /A KW = %TachDesJahres% - %Wochentach% + 7 ( wenn Wochentach von 0=Mo bis 7=So gesetzt ist)
.. SET /A KW /= 7 ... fertig

Siehe hier

Wenn Du einschränkst, dass Du die KW nur berechnen können willst für die Jahre 2000 bis 2019, dann kannst Du natürlich diese Information Wochentag(skorrektur) im Jahr X in Deinem Batch verwalten.

Grüße
Biber
Member: Blueberry
Blueberry Oct 02, 2008 at 15:03:27 (UTC)
Goto Top
Nimm date aus dem Paket unxutils und baue das in deine
Lösung ein.
Am Prompt:
.\date +%W
ergibt für heute eine 39

cu paulepank

Ich darf keine Zusatzprogramme brauchen... und heute gäb das ne 40 ;) Ist so im Outlook aufgeführt (hoffentlich ist das ein Fehler im Outlook, denn dann hätte ich das Programm schon seid ca. 2 oder 2,5h ^^)
Member: paulepank
paulepank Oct 02, 2008 at 15:22:17 (UTC)
Goto Top
Hallo Sandro,

stimmt mit der 40. Ich hatte den falschen Parameter.
.\date +%V

Aber da du verdonnert bist, deine Zeit mit dem Erfinden des Fahrrades auszufüllen, hilft dir das wenig weiter.

Dein Lehrer sollte dir sinnvolle Aufgaben stellen.

cu paulepank
Member: Blueberry
Blueberry Oct 02, 2008 at 16:36:46 (UTC)
Goto Top
Hallo Zusammen,

@Biber,
Was meinst du mit skorrektur ?
Ist das ein Befehl (Info: Ich darf keine Zusatzprogramme verwenden nur die, die Standart mässig dabei sind ).

@paulepank,
Das sind sinvolle Aufgaben, denn schluss endlich gehen diese Programme, die ich schreibe, auf die Firmen Server
. Und herumzu knobbeln mag ich eigtl. auch...
Member: paulepank
paulepank Oct 02, 2008 at 17:09:50 (UTC)
Goto Top
Hallo Sandro,

unter Sinnvoll verstehe ich etwas anderes.
Wenn ein fertiges Programm "date" vorhanden ist, sollte man das auch nehmen.
Die gewonnene Zeit kann man für die Ausbildung nutzen. Ich rede hier von Effizienz.

Aber gut, du kennst jetzt eine einfache Lösung und Batch ist nicht für alles eine Lösung.
Viel Spaß beim weiterknobeln.

cu paulepank
Member: Blueberry
Blueberry Oct 02, 2008 at 19:06:01 (UTC)
Goto Top
Hallo Paulepank,

Mein Lehrmeister ist diese Woche in den Ferien... Und ja dann wird die Ausbildung ein bisschen schwerer ;)

Wenn ich die Lösung habe, werde ich diese reinstellen, darum bitte ich, diesen Thread noch nicht zu schliessen oder als gelöst zu bezeichnen.
Danke!

Mit freundlichen Grüssen

Sandro Lampart
Alias Blueberry
Member: Biber
Biber Oct 04, 2008 at 10:18:08 (UTC)
Goto Top
Moin blueberry,

mit "Wochentag" bzw "Wochentagskorrektur" meinte ich nur:

Wenn heute der 280ste Tag des Jahres wäre, dann wäre formal die Unterstellung richtig, das es sich um Kalenderwoche 40 handelt ( 280 / 7 = 40).

Aber ob der 280ste Tag der 39sten, 40sten oder 41sten KW zugeordnet wird hängt eben vom Wochentag ab.
Bzw. davon, an welchem Tag die 1. KW des Jahres begann.
(und eigentlich auch, ob die Kalenderwochen im betreffenden Land von Sonntag bis Samstag oder von Montag bis Sonntag gemeint sind).

Diesen Wochentagswert musst Du in der Formel berücksichtigen - siehe oben.

Grüße
Biber
Member: Blueberry
Blueberry Oct 07, 2008 at 11:24:43 (UTC)
Goto Top
Hallo Zusammen,

Ich habe das Programm fertiggestellt und ich hoffe das es funktioniert, ich habe es noch nicht gross getestet... Aber ich habe vertrauen in mein Programm.
So hier ist es (es ist ein grosser erfolg für mich da ich erst seid ein paar Wochen mit Batch arbeite.):


@ECHO OFF

:DATUMEINGEBEN
REM Erstellen der Variable, um das Datum einzugeben.
SET /P DATUM=Geben Sie das Datum ein (DD.MM.JJJJ): 

REM Auseinander nehmen des Datums in Tage, Monate, Jahre und zuweisen der Variablen.
FOR /F "TOKENS=1,2,3 DELIMS=:./- " %%A IN ("%DATUM%") DO (  
SET DD=%%A
SET MM=%%B
SET JJ=%%C)

REM Überprüfen, ob es ein Schaltjahr ist. 
SET /A ERGEBNIS=%JJ% %% 4
SET /A ERGEBNIS100=%JJ% %% 100 
SET /A ERGEBNIS400=%JJ% %% 400
 
IF %ERGEBNIS400% == 0 (SET ZUSATZ=1) ELSE (
IF %ERGEBNIS100% == 0 (SET ZUSATZ=0) ELSE (
IF %ERGEBNIS% == 0 (SET ZUSATZ=1) ELSE  (SET ZUSATZ=0))) 

REM Wenn Das Jahr unter 2007 liegt muss der Zusatz minus gerechnet werden und das wird hier berechnet.
IF %JJ% LSS 2007 (SET /A ZUSATZ3=-%ZUSATZ%) ELSE (SET ZUSATZ3=%ZUSATZ%)

REM Hier werden die vergangenen Tag berechnet.
IF %MM%==01 SET /A VTAGE= 0
IF %MM%==02 SET /A VTAGE= 31
IF %MM%==03 SET /A VTAGE= 31 +28
IF %MM%==04 SET /A VTAGE= 31 +28 +31
IF %MM%==05 SET /A VTAGE= 31 +28 +31 +30
IF %MM%==06 SET /A VTAGE= 31 +28 +31 +30 +31
IF %MM%==07 SET /A VTAGE= 31 +28 +31 +30 +31 +30
IF %MM%==08 SET /A VTAGE= 31 +28 +31 +30 +31 +30 +31
IF %MM%==09 SET /A VTAGE= 31 +28 +31 +30 +31 +30 +31 +31
IF %MM%==10 SET /A VTAGE= 31 +28 +31 +30 +31 +30 +31 +31 +30
IF %MM%==11 SET /A VTAGE= 31 +28 +31 +30 +31 +30 +31 +31 +30 +31
IF %MM%==12 SET /A VTAGE= 31 +28 +31 +30 +31 +30 +31 +31 +30 +31 +30

REM Hier wird der Zusatz2 berechnet.
SET /A ZUSATZ2=%JJ%-2007

REM Der Zusatz2 soll nicht grösser als 6 werden, dieses Problem löse ich hier.
SET /A ZUSATZ2=%ZUSATZ2% %% 7

REM Weil ich immer vom Jahr 2007 aus rechne, muss ich noch die Schaltjahre einbeziehen, damit die Rechnung richtig ist.
SET /A ZUSATZ4=(%JJ%-2007)/4 - (%JJ%-2007)/100 + (%JJ%-2007)/400

REM Der Zusatz4 darf nicht grösser werden als 6, das mache ich hier.
SET /A ZUSATZ4=%ZUSATZ4% %% 7


REM Diese Variable ist als Summe von Zusatz2 und Zusatz4 definiert.
SET /A ZUSATZZ=%ZUSATZ2%+%ZUSATZ4%

REM Der ZUSATZZ darf nicht grösser als 7 oder kleiner als -7 werden. 
SET /A ZUSATZZ=%ZUSATZZ% %% 7

REM Hier wird die Woche berechnet.
SET /A WOCHENNUMMER=1000+%VTAGE%+%DD%+%ZUSATZ3%+%ZUSATZZ%
SET /A WOCHENNUMMER2=%WOCHENNUMMER:~1,3%
SET /A WOCHENNUMMER3=(%WOCHENNUMMER2%+6)/7

REM Hier schaue ich, dass die Kalenderwoche nicht grösser als 52 werden kann
IF %WOCHENNUMMER3% GTR 52 (SET /A WOCHENNUMMER3=%WOCHENNUMMER3%-52)

CLS
ECHO Eingegebenes Datum: %DD%.%MM%.%JJ%
ECHO Die Kalenderwoche dazu ist: %WOCHENNUMMER3%
PAUSE

CLS
GOTO :DATUMEINGEBEN
Member: paulepank
paulepank Oct 07, 2008 at 14:21:06 (UTC)
Goto Top
Hallo Sandro,

du wolltest Feedback.
Wofür steht DD in deiner DD.MM.JJJJ ? face-smile

ich habe vertrauen in mein Programm.
Vertrauen ist gut, Kontrolle ist bessser.

Der 01.01.2008 ist bei dir KW 1 -> richtig KW 1
Der 07.01.2008 ist bei dir KW 1 -> richtig KW 2
Der 29.02.2008 ist bei dir KW 8 -> richtig KW 9
usw.

Neustart der Batch

Der 07.01.2008 ist bei dir KW 0 -> richtig KW 2
Der 14.01.2008 ist bei dir KW 2 -> richtig KW 3

Viel Spaß beim weiterknobeln

cu paulepank
Member: Blueberry
Blueberry Oct 08, 2008 at 11:59:11 (UTC)
Goto Top
Hi paulepank,

Das DD steht für den Tag (d=day) und es hat 2 D damit man weiss wie lang das es minimum und maximum sein darf ... face-smileface-wink

Ich werde noch eine neue Datei machen und diese etwas anderst aufbauen... Bin von der alten Datei ein wenig verwirrt an manchen stellen ^^

Mit freundlichen Grüssen

Sandro Lampart
Alias Blueberry
Member: paulepank
paulepank Oct 08, 2008 at 15:07:53 (UTC)
Goto Top
Hallo Sandro,

wenn DD für Day steht, dann steht JJJJ bestimmt für Year.
Ich hoffe du hast meine Anspielung jetzt verstanden face-smile

cu paulepank
Member: Blueberry
Blueberry Oct 16, 2008 at 08:40:35 (UTC)
Goto Top
Zitat von @paulepank:
Hallo Sandro,

wenn DD für Day steht, dann steht JJJJ bestimmt für Year.
Ich hoffe du hast meine Anspielung jetzt verstanden face-smile

cu paulepank


Hallo Paulepank,

Wegen der Anspielung... Muss ich noch überlegen bin 16 oh nein schon 17 ( seid 2 Tagen face-smile)

Mit freundlichen Grüssen

Blueberry
Member: Blueberry
Blueberry Oct 16, 2008 at 13:00:34 (UTC)
Goto Top
Member: Blueberry
Blueberry Oct 16, 2008 at 13:03:41 (UTC)
Goto Top
Hallo Paulepank,

Hier hast du dein Fahrrad und das noch mit ISO-Vorschriften face-wink

@ECHO Off & SETLOCAL

:START
CLS
::Hier erfolgt die Datumseingabe
SET /P DATUM=Geben Sie hier das Datum ein (DD:MM:JJJJ):

::Hier wird das Jahr auseinander genommen und Variabeln zugewiesen.
FOR /F "TOKENS=1,2,3 DELIMS=.:-/_;, " %%A IN ("%DATUM%") DO (  
SET D=%%A 
SET M=%%B 
SET Y=%%C )

:: Überprüfen, ob es ein Schaltjahr ist.
SET /A ERGEBNIS=(%Y%) %% 4
SET /A ERGEBNIS100=(%Y%) %% 100
SET /A ERGEBNIS400=(%Y%) %% 400

IF %ERGEBNIS400% == 0 (SET LEAPYEAR= 1) ELSE (
IF %ERGEBNIS100% == 0 (SET LEAPYEAR= 0) ELSE (
IF %ERGEBNIS% == 0 (SET LEAPYEAR= 1) ELSE  (SET LEAPYEAR= 0)))

:: Überprüft, ob das Vorjahr ein Schaltjahr war.
SET /A EERGEBNIS=(%Y%-1) %% 4
SET /A EERGEBNIS100=(%Y%-1) %% 100
SET /A EERGEBNIS400=(%Y%-1) %% 400

IF %EERGEBNIS400% == 0 (SET LLEAPYEAR= 1) ELSE (
IF %EERGEBNIS100% == 0 (SET LLEAPYEAR= 0) ELSE (
IF %EERGEBNIS% == 0 (SET LLEAPYEAR= 1) ELSE  (SET LLEAPYEAR= 0)))

::Hier wird berechnet wieviele Tage schon vergangen sind.
IF %M% == 01 (SET VTAGE=0  )
IF %M% == 02 (SET VTAGE=31 )
IF %M% == 03 (SET VTAGE=59 )
IF %M% == 04 (SET VTAGE=90 )
IF %M% == 05 (SET VTAGE=120)
IF %M% == 06 (SET VTAGE=151)
IF %M% == 07 (SET VTAGE=181)
IF %M% == 08 (SET VTAGE=212)
IF %M% == 09 (SET VTAGE=243)
IF %M% == 10 (SET VTAGE=273)
IF %M% == 11 (SET VTAGE=304)
IF %M% == 12 (SET VTAGE=334)


:: Erstellen der DAYOFYEARNUMBER.
SET /A DAYOFYEARNUMBER= %D% + %VTAGE%

IF %M% GTR 2 SET /A DAYOFYEARNUMBER+=%LEAPYEAR%

::Wochen tag vom 01 Januar.
SET /A YY=(%Y%-1) %% 100
SET /A C=(%Y%-1) - %YY%
SET /A G=%YY% + %YY%/4
SET /A JAN1WEEKDAY= 1 +(((((%C% / 100) %% 4)* 5) + %G%) %% 7)

:: Der Wochentag des eingegebenen Datums herausfinden.
SET /A H= %DAYOFYEARNUMBER% + %JAN1WEEKDAY% -1
SET /A WEEKDAY= 1 + ((%H%-1) %%7)

::Falls das Datum auf YEARNUMBER Y-1 fällt, ob es Woche 52 oder 53 ist.
SET /A DIFFL3=8-%JAN1WEEKDAY%
IF %DAYOFYEARNUMBER% LEQ %DIFFL3% (SET VAR1=1) ELSE (SET VAR1=0)
IF %JAN1WEEKDAY% GTR 4 (SET VAR2=1) ELSE (SET VAR2=0)
SET /A VAR3=%VAR1%+%VAR2%

IF %VAR3% GTR 1 (CALL :SUB1) ELSE (SET YEARNUMBER=%Y%)

::Falls das DAtum auf YEARNUMBER Y+1 fällt, ob es Wochenummer 1 ist.
IF %YEARNUMBER%==%Y% CALL :SUB3

::Wenn das eingegebene Datum auf das YEARNUMBER Y fällt, wird die Woche 1 zu Woche 53.
IF %YEARNUMBER%==%Y% CALL :SUB4

::Hier ist die Ausgabe.
IF %WEEKNUMBER% LSS 10 (SET WEEKNUMBER=%WEEKNUMBER%)
ECHO %WEEKNUMBER%
PAUSE
GOTO START


:SUB1
SET /A YEARNUMBER=%Y%-1 
IF %JAN1WEEKDAY%==5 (GOTO SET53) ELSE (SET VAR5=0)

IF %JAN1WEEKDAY%==6 (SET VAR6=1) ELSE (SET VAR6=0)
SET /A VAR7=%LLEAPYEAR%+%VAR6%
IF %VAR7% GTR 1 (GOTO SET53) ELSE (SET WEEKNUMBER=52)
GOTO :EOF

:SET53
SET WEEKNUMBER=53
GOTO :EOF

:SUB2
IF %LLEAPYEAR% == 1 (SET /A SCHALTJAHR= -1) ELSE (SET /A SCHALTJAHR= +1)
GOTO :EOF

:SUB3
SET /A I=%LEAPYEAR%+365
SET /A DIFFL=%I%-%DAYOFYEARNUMBER%
SET /A DIFFL2=4-%WEEKDAY%

IF %DIFFL% LSS %DIFFL2% (GOTO SETZU) ELSE (GOTO :EOF)

:SETZU
SET /A YEARNUMBER= %Y% +1
SET WEEKNUMBER=1
GOTO :EOF

:SUB4
SET /A J= %DAYOFYEARNUMBER% + 7 - %WEEKDAY% + %JAN1WEEKDAY% -1
SET /A WEEKNUMBER=%J%/7
IF %JAN1WEEKDAY% GTR 4 (SET /A WEEKNUMBER-= 1)
GOTO :EOF

Probiert es aus face-smile
Ich habe es beretis erfolgreich getestet...
Ich möchte mich noch bei allen bedanken, die mir dabei geholfen haben und wenn ich wieder einmal so ne Aufgabe habe, bin ich schnell wieder da face-wink.


Mit freundlichen Grüssen und ich wünsche euch diese Aufgabe nicht!
Blueberry
Member: paulepank
paulepank Oct 16, 2008 at 14:01:33 (UTC)
Goto Top
Hallo,

Ich habe es beretis erfolgreich getestet...

wie man testet, solltest du in deine "Batcherei" mit einbeziehen.
Gib den 08.01.2008 ein und du hast noch ein langes Wochenende vor dir.

Ach ja, bevor du 20 wirst:

Entweder TT.MM.JJJJ oder DD.MM.YYYY

cu paulepank
Member: Blueberry
Blueberry Oct 17, 2008 at 06:29:43 (UTC)
Goto Top
Hallo Paulepanke,

Ich bin schon wieder dran -.- face-smile
Member: Blueberry
Blueberry Oct 17, 2008 at 06:57:33 (UTC)
Goto Top
Hallo Paulepank,

Ich hoffe, dass mein Wochenende nicht so kurz wird, wie die Zeit die ich aufwenden musste, um das mit dem 08:01:2008 zu debugen face-wink
Das Problem war das es oktale Werte waren, und im oktalen Zahlenstrahl gibt es kein 08 oder 09 face-wink Das gleiche hab ich gleich mit den Monaten gemacht.

@ECHO OFF

:START
CLS
SET /P DATUM=Geben Sie hier das Datum ein (TT:MM:JJJJ):

FOR /F "TOKENS=1,2,3 DELIMS=.:-/_;, " %%A IN ("%DATUM%") DO (  
SET D=%%A 
SET M=%%B 
SET Y=%%C )

IF %D% LSS 10 (SET /A D=%D:~1,1%)
IF %M% LSS 10 (SET /A M=%M:~1,1%)

SET /A ERGEBNIS=(%Y%) %% 4
SET /A ERGEBNIS100=(%Y%) %% 100
SET /A ERGEBNIS400=(%Y%) %% 400

IF %ERGEBNIS400% == 0 (SET LEAPYEAR= 1) ELSE (
IF %ERGEBNIS100% == 0 (SET LEAPYEAR= 0) ELSE (
IF %ERGEBNIS% == 0 (SET LEAPYEAR= 1) ELSE  (SET LEAPYEAR= 0)))

SET /A EERGEBNIS=(%Y%-1) %% 4
SET /A EERGEBNIS100=(%Y%-1) %% 100
SET /A EERGEBNIS400=(%Y%-1) %% 400

IF %EERGEBNIS400% == 0 (SET LLEAPYEAR= 1) ELSE (
IF %EERGEBNIS100% == 0 (SET LLEAPYEAR= 0) ELSE (
IF %EERGEBNIS% == 0 (SET LLEAPYEAR= 1) ELSE  (SET LLEAPYEAR= 0)))

IF %M% == 01 (SET VTAGE=0  )
IF %M% == 02 (SET VTAGE=31 )
IF %M% == 03 (SET VTAGE=59 )
IF %M% == 04 (SET VTAGE=90 )
IF %M% == 05 (SET VTAGE=120)
IF %M% == 06 (SET VTAGE=151)
IF %M% == 07 (SET VTAGE=181)
IF %M% == 08 (SET VTAGE=212)
IF %M% == 09 (SET VTAGE=243)
IF %M% == 10 (SET VTAGE=273)
IF %M% == 11 (SET VTAGE=304)
IF %M% == 12 (SET VTAGE=334)

SET /A DAYOFYEARNUMBER= %D% + %VTAGE%

IF %M% GTR 2 (SET /A DAYOFYEARNUMBER=%DAYOFYEARNUMBER%+%LEAPYEAR%)

SET /A YY=(%Y%-1) %% 100
SET /A C=(%Y%-1) - %YY%
SET /A G=%YY% + %YY%/4
SET /A JAN1WEEKDAY= 1 +(((((%C% / 100) %% 4)* 5) + %G%) %% 7)

SET /A H= %DAYOFYEARNUMBER% + %JAN1WEEKDAY% -1
SET /A WEEKDAY= 1 + ((%H%-1) %%7)

SET /A DIFFL3=8-%JAN1WEEKDAY%
IF %DAYOFYEARNUMBER% LEQ %DIFFL3% (SET VAR1=1) ELSE (SET VAR1=0)
IF %JAN1WEEKDAY% GTR 4 (SET VAR2=1) ELSE (SET VAR2=0)
SET /A VAR3=%VAR1%+%VAR2%

IF %VAR3% GTR 1 (CALL :SUB1) ELSE (SET YEARNUMBER=%Y%)

IF %YEARNUMBER%==%Y% CALL :SUB3

IF %YEARNUMBER%==%Y% CALL :SUB4

CLS
IF %WEEKNUMBER% LSS 10 (SET WEEKNUMBER=%WEEKNUMBER%)
ECHO Woche %WEEKNUMBER%
PAUSE
GOTO START


:SUB1
SET /A YEARNUMBER=%Y%-1 
IF %JAN1WEEKDAY%==5 (GOTO SET53) ELSE (SET VAR5=0)

IF %JAN1WEEKDAY%==6 (SET VAR6=1) ELSE (SET VAR6=0)
SET /A VAR7=%LLEAPYEAR%+%VAR6%
IF %VAR7% GTR 1 (GOTO SET53) ELSE (SET WEEKNUMBER=52)
GOTO :EOF

:SET53
SET WEEKNUMBER=53
GOTO :EOF

:SUB2
IF %LLEAPYEAR% == 1 (SET /A SCHALTJAHR= -1) ELSE (SET /A SCHALTJAHR= +1)
GOTO :EOF

:SUB3
SET /A I=%LEAPYEAR%+365
SET /A DIFFL=%I%-%DAYOFYEARNUMBER%
SET /A DIFFL2=4-%WEEKDAY%

IF %DIFFL% LSS %DIFFL2% (GOTO SETZU) ELSE (GOTO :EOF)

:SETZU
SET /A YEARNUMBER= %Y% +1
SET WEEKNUMBER=1
GOTO :EOF

:SUB4
SET /A J= %DAYOFYEARNUMBER% + 7 - %WEEKDAY% + %JAN1WEEKDAY% -1
SET /A WEEKNUMBER=%J%/7
IF %JAN1WEEKDAY% GTR 4 (SET /A WEEKNUMBER-= 1)
GOTO :EOF

Mit freundlichen Grüssen
Blueberry
Member: Blueberry
Blueberry Oct 17, 2008 at 07:46:39 (UTC)
Goto Top
OMG -.- Da hatte ich ja noch gar nixx!
Ignoriert bitte den Teil ganz oben...
Das richtige Programm ist gleich oben an diesem Kommentar.

Mit freundlichen Grüssen

Blueberry
Member: paulepank
paulepank Oct 17, 2008 at 08:54:30 (UTC)
Goto Top
Hallo,

und wann wirst du dein Script mal selbst testen, um zu merken, das z.B. der 08:01:2008 immer noch buggy ist ?

so langsam wird es nervig.

cu paulepank
Member: Blueberry
Blueberry Oct 17, 2008 at 09:04:29 (UTC)
Goto Top
Bei mir hat es funktioniert... Und noch was:
Entweder gibst du mir einen Tipp oder lässt es einfach sein. Dein rum Geheule, will und kann ich einfach nicht brauchen, wenn es nervt, dann geh doch einfach und lass mich in ruhe Klar ?

Und wenn du nur ein bisschen über deine Nase hinaus überlegt hättest, dann hättest du auch gemerkt das ich das falsche Script heraufgeladen habe.

Einfach die Nullen vor den Zahlen weg nehmen, ausser beim Oktober also bei der 10 da stehen lassen, sonst gibt es einen Bug. Ich hoffe ich habe nixx vergessen so das du auch ja nicht überlegen musst. Und sonst einfach ne PN oder wieder hier reinschreiben (bitte aber ohne geheul).
IF %M% == 1 (SET VTAGE=0 )
IF %M% == 2 (SET VTAGE=31 )
IF %M% == 3 (SET VTAGE=59 )
IF %M% == 4 (SET VTAGE=90 )
IF %M% == 5 (SET VTAGE=120)
IF %M% == 6 (SET VTAGE=151)
IF %M% == 7 (SET VTAGE=181)
IF %M% == 8 (SET VTAGE=212)
IF %M% == 9 (SET VTAGE=243)
IF %M% == 10 (SET VTAGE=273)
IF %M% == 11 (SET VTAGE=304)
IF %M% == 12 (SET VTAGE=334)

Dann funktioniert das Programm auch.

MfG
Member: Blueberry
Blueberry Oct 17, 2008 at 10:07:37 (UTC)
Goto Top
Zitat von @paulepank:
Hallo,

und wann wirst du dein Script mal selbst testen, um zu merken, das
z.B. der 08:01:2008 immer noch buggy ist ?

Ich hab mein Script getestet...
Member: paulepank
paulepank Oct 17, 2008 at 10:08:11 (UTC)
Goto Top
Hallo,

deine letzten Bemerkungen stehen im krassen Widerspruch zu Zitat:
da ich Feedbacks (Positive UND Negative) sehr gut finde.

ich habe dir den Tipp gegeben, die Art des Testens zu überdenken.
- Starte dein Script (ich gehe davon aus, daß es der gleiche Code ist wie hier veröffentlicht)
- gib den 08:01:2008 ein.
- dann kommt die Fehlermeldung: "6" ist syntaktisch an dieser Stelle nicht verarbeitbar.
- Sofern das bei dir nicht der Fall ist, sind die Testbedingungen verschieden oder der hier veröffentlichte Code weicht ab
- entferne @echo off und sieh dir die Fehlerausgabe an.(%LEAPYEAR%)
- generelles Problem: Zufallsbelegung von Variablen (siehe Post vom 7.10)


dann geh doch einfach und lass mich in ruhe Klar

da du mich immer wieder persönlich angesprochen hast, habe ich überhaupt noch auf deine Artikel reagiert. Aber das hätten wir ja jetzt geklärt.


im Ton hast du dich allemal vergriffen

cu paulepank
Member: Blueberry
Blueberry Oct 17, 2008 at 10:11:21 (UTC)
Goto Top
Ja aber das rum geheule kann ich nicht brauchen. Dann sag mir ich soll mein Script besser testen, aber nicht so rum Jammern das geht mir voll aufen Sack.
Member: Blueberry
Blueberry Oct 17, 2008 at 10:15:23 (UTC)
Goto Top
im Ton hast du dich allemal vergriffen

Was findest du den falsch an meinem Ton?
Wie soll ich es den schreiben, dass es nicht mit einem Falschen Ton rüber kommt?
Ich bin ein Schweizer, hier ist rum heulen nicht böse gemeint oder falscher Ton oder so, sondern eine Art, wie man etwas rüberbringt. Und wenn du schreibst das es dich nervt, kommt das bei mir rüber als MUSST du das machen. Ich habe mich hier nicht im Ton vergriffen... Du wirst es spürbar merken wenn ich mich im Ton vergreiffe was aber nicht passieren wird, insofern du mich nicht beleidigst oder so. Und ich denke das wir alt genug sind und einander nicht beleidigen müssen oder ???

MfG