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
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.
Hier der gesamte Code
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
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 177492
Url: https://administrator.de/contentid/177492
Ausgedruckt am: 28.03.2024 um 08:03 Uhr
4 Kommentare
Neuester Kommentar
Moin meier2009,
willkommen im Forum.
Die Zeile
... wird doch aufgelöst zu
--> 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
... wird aufgelöst zu
P.S.
Aber im Januar bei Monat "01" solltest du die Mimik analog umsetzen.
Grüße
Biber
willkommen im Forum.
Die Zeile
set /a gtag=%tag%-1
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
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 Aber im Januar bei Monat "01" solltest du die Mimik analog umsetzen.
Grüße
Biber
Moin meier2009,
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
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