meier2009
Goto Top

Datum rechnen in Batch geht seit Gestern NICHT mehr

Hallo Leute,

zur Info des was und warum. Ein PV Richter braucht zum Speichern seiner Daten täglich die Verbindung zu einem Rechner um das aktuelle Datum zu bekommen.

Wenn ich mich schon mit dem Richter verbinde, sollen auch gleich die Gestrigen Daten ausgelesen werden!
Nach vielem Lesen hier habe ich mir eine Batch zusammengeschrieben die nun vom Taskplaner täglich gestartet wird um die Daten auszulesen.

Das hat auch wunderbar funktioniert , BIS GESTERN!

Seitdem bringt er mir immer den Fehler:
Ungültige Zahl. Numerische Konstanten sind entweder dezimale(17), hexadezimale (0x11) oder oktale (021) Zahlen.
wenn er an dieser Stelle ankommt
set /a gtag=%gtag%-1
zu Zeile 76:
er hat mir dann bei Tagen unter 10 immer eine einzahliges Ergebniss ausgegeben und ich habe dann die Null wieder davor gestellt.
if %gtag% LSS 10 set /a gtag=0%gtag%

Hier der gesamte Code
set x=0
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set control=%monat%%tag%
set month=%jahr%%monat%
set gtag=%tag%

rem Jan
if %control%==0101 (set monat=12)
if %control%==0101 (set x=1)
if %control%==0101 (set tag=31)
if %control%==0101 (set /a jahr=%jahr%-1)

rem Feb
if %control%==0201 (set monat=01)
if %control%==0201 (set x=1)
if %control%==0201 (set tag=31)

rem Mar
if %control%==0301 (set monat=02)
if %control%==0301 (set x=1)
if %control%==0301 (set tag=29)

rem Apr
if %control%==0401 (set monat=03)
if %control%==0401 (set x=1)
if %control%==0401 (set tag=31)

rem Mai
if %control%==0501 (set monat=04)
if %control%==0501 (set x=1)
if %control%==0501 (set tag=30)

rem Jun
if %control%==0601 (set monat=05)
if %control%==0101 (set x=1)
if %control%==0601 (set tag=31)

rem Jul
if %control%==0701 (set monat=06)
if %control%==0701 (set x=1)
if %control%==0701 (set tag=30)

rem Aug
if %control%==0801 (set monat=07)
if %control%==0801 (set x=1)
if %control%==0801 (set tag=31)

rem Sep
if %control%==0901 (set monat=08)
if %control%==0901 (set x=1)
if %control%==0901 (set tag=31)

rem Okt
if %control%==1001 (set monat=09)
if %control%==1001 (set x=1)
if %control%==1001 (set tag=30)

rem Nov
if %control%==1101 (set monat=10)
if %control%==1101 (set x=1)
if %control%==1101 (set tag=31)

rem Dez
if %control%==1201 (set monat=11)
if %control%==1201 (set x=1)
if %control%==1201 (set tag=30)


rem check ob von "hand" geändert  
if %x%==1 goto weiter

rem gestern
set /a gtag=%tag%-1
if %gtag% LSS 10 set /a gtag=0%gtag%

:weiter
set gestern=%jahr%%monat%%gtag%
if %x%==1 set gestern=%jahr%%monat%%tag%
set today=%jahr%%monat%%tag%

Also,wie gesagt, seit Gestern gehts NICHT mehr, vorher hats einen Monat lang funktioniert, selbst denn Monatswechsel hat er gerafft und dann den tag davor genommen.
Falls einer ne Idee hätte.....

greetz und Thx schon mal

Content-Key: 177492

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: Biber
Biber 09.12.2011 um 10:16:37 Uhr
Goto Top
Moin meier2009,

willkommen im Forum.

Die Zeile
set /a gtag=%tag%-1 
... wird doch aufgelöst zu
set /a gtag=09-1 

--> was ja durch die führende "0" bewirkt, dass gerechnet werden soll mit oktal 09 --> was es seit ca 2900 Jahren nicht mehr gibt.

Also rechne an dieser Stelle besser

set /a gtag=1%tag%-101 
... wird aufgelöst zu
set /a gtag=109-101 && REM was 8 ergibt as should do  

P.S.
selbst denn Monatswechsel hat er gerafft
was beim Wechseln von "11" auf "12" auch nicht schwierig ist face-wink
Aber im Januar bei Monat "01" solltest du die Mimik analog umsetzen.

Grüße
Biber
Mitglied: meier2009
meier2009 09.12.2011 um 10:27:47 Uhr
Goto Top
hi Biber,

danke, das hat geholfen ! face-smile

Was nu aber nicht erklärt warum es bis Gestern bzw. Vorgestern ging.
oder hängt das von der Oktal Geschichte ab, das es vor dem 8. noch zufällig richtig ging?
Mitglied: Biber
Biber 09.12.2011 um 11:02:39 Uhr
Goto Top
Moin meier2009,

Was nu aber nicht erklärt warum es bis Gestern bzw. Vorgestern ging.
Doch, das erklärt es schon.

01 ist eine gültige Oktalzahl, nämlich dezimal 1
02 ist eine gültige Oktalzahl, nämlich dezimal 2
...
06 ist eine gültige Oktalzahl, nämlich dezimal 6
07 ist eine gültige Oktalzahl, nämlich dezimal 7

08 ist keine gültige Oktalzahl und grätscht ab. --> also TILT am 08.12.
09 ist keine gültige Oktalzahl und grätscht ab. --> also TILT am 09.12.

10 und folgende werden ja nicht mehr als Oktalzahlen interpretiert, da keine führende 0

Grüße
Biber
Mitglied: meier2009
meier2009 09.12.2011 um 12:26:45 Uhr
Goto Top
also so wie vermutet

der trick mit der vorangestellten 1 ist aber gut ;) werd ich mir merken!

greetz und thx