eisdiele
Goto Top

Rechnen im Batchscript (mit set /a) folgender Fehler erscheint-

[Edit] Hm, ich setz es mal auf "gelöst"... Biber, 2.9.2006 [/Edit]

Hallo,

in den Zeilen die mit @set beginnen, kommt folgender Fehler:

Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11), or octal (021).

Ich hab jetzt schon mit google gesucht, allerdings nichts gefunden an was das liegen könnte. auch set /? hat mir nicht geholfen... in myjahr steht 2006 in mymonat 08 und in mytag 29.

@echo off

REM Datum auslesen
@for /F "tokens=1,2,3 delims=." %%a in ('date /T' ) do @set MYMONAT=%%b
@for /F "tokens=1,2,3 delims=." %%a in ('date /T' ) do @set MYJAHR=%%c
@for /F "tokens=1,2,3 delims=." %%a in ('date /T' ) do @set MYTAG=%%a
@for /F "tokens=1,2,3 " %%a in ('@echo %MYJAHR%') do @set MYJAHR=%%a

echo %myjahr%%mymonat%%mytag%

IF MYMONAT LEQ 3 (
@set /a MYMONAT = %MYMONAT% + 9
@set /a MYJAHR = %MYJAHR% - 1
) else (
@set /a MYMONAT = %MYMONAT% - 3
)

Content-ID: 38931

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

Ausgedruckt am: 26.11.2024 um 15:11 Uhr

hoschen
hoschen 29.08.2006 um 09:15:40 Uhr
Goto Top
bei der Berechnung dürfen die Zahlen nicht die "führende" Null haben:

Falsch: set /a MYMONAT = 08 +9

Richtig: set /a MYMONAT = 8 + 9
eisdiele
eisdiele 29.08.2006 um 09:24:18 Uhr
Goto Top
das Problem ist aber, dass ich die führende null später für robocopy brauche, da robocopy das datum bei einem atribut als YYYYMMDD haben will...
hoschen
hoschen 29.08.2006 um 09:32:41 Uhr
Goto Top
dann doch das Ergebnis "MYMONAT" prüfen, wenn 1stellig dann eine 0 davor, wenn zweistellig dann keine 0 davor.
miniversum
miniversum 29.08.2006 um 09:43:13 Uhr
Goto Top
Das Problem liegt nicht an der führenden Null sondern daran das du mit der For-Schleife einen Textstring zerlegst. In den Variablen steht also der Text "08" nicht die Zahl.
Darum geht die Rechnung mit set /a schief, weil du ja nicht zu einem Text eine Zahl addieren oder Subtrahieren kannst.

miniversum
eisdiele
eisdiele 29.08.2006 um 09:45:25 Uhr
Goto Top
wie ich die 0 vor der 8 löschen kann weiß ich, allerdings nicht, wie ich sie wieder dort hinbekomme!?
eisdiele
eisdiele 29.08.2006 um 09:56:24 Uhr
Goto Top
mit: set /a MYMONAT = %MYMONAT:~1% - 3

funktioniert die rechnung aber wunderbar, jetzt muss nur die 0 wieder vor die Ziffer kommen, dann sollte mein script endlich funktionieren...
Biber
Biber 29.08.2006 um 10:28:43 Uhr
Goto Top
Moin eisdiele,

zum Beispiel so ändern:
::--------snipp dateSplit.bat
@echo off 
REM Datum auslesen
@for /F "tokens=1-3 delims=." %%a in ('date /T') do (  
       set MYMONAT=1%%b
       set MYJAHR=%%c
       set MYTAG=1%%a
)
REM echo %myjahr%%mymonat%%mytag%

IF %MYMONAT% LEQ 103 (
       set /a MYMONAT = %MYMONAT% + 9
       set /a MYJAHR = %MYJAHR% - 1
) else ( 
       set /a MYMONAT = %MYMONAT% - 3
)
Set mymonat=%mymonat:~1,2%
Set mytag=%mytag:~1,2%
Echo Mytag:[%Mytag%] MyMonat [%Mymonat%] MyJahr [%MyJahr%]

REM Output: >datesplit.bat
REM Output: Mytag:[29] MyMonat [05] MyJahr [2006]
:: ---------snapp DateSplit.bat

HTH Biber
Siehe auch mein Batch-Tutorial III (Umgang mit Datums- und Zeitvariablen im Batch..)