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-Key: 38931

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

Printed on: April 18, 2024 at 23:04 o'clock

Member: hoschen
hoschen Aug 29, 2006 at 07:15:40 (UTC)
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
Member: eisdiele
eisdiele Aug 29, 2006 at 07:24:18 (UTC)
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...
Member: hoschen
hoschen Aug 29, 2006 at 07:32:41 (UTC)
Goto Top
dann doch das Ergebnis "MYMONAT" prüfen, wenn 1stellig dann eine 0 davor, wenn zweistellig dann keine 0 davor.
Member: miniversum
miniversum Aug 29, 2006 at 07:43:13 (UTC)
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
Member: eisdiele
eisdiele Aug 29, 2006 at 07:45:25 (UTC)
Goto Top
wie ich die 0 vor der 8 löschen kann weiß ich, allerdings nicht, wie ich sie wieder dort hinbekomme!?
Member: eisdiele
eisdiele Aug 29, 2006 at 07:56:24 (UTC)
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...
Member: Biber
Biber Aug 29, 2006 at 08:28:43 (UTC)
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..)