bufferm44
Goto Top

Hochzählen einer Variable funktioniert ab 08 nicht mehr

Hi zusammen!

Ich habe etwas wirklich merkwürdiges:

Man erstelle eine Datei c:\tag.txt mit dem Inhalt 01.

Mal führe folgendes Script 7x aus, aber beim 8. Mal macht er aus der 08 keine 09 sondern eine 01. Ich versetehe es nicht...

set /p tag=<"C:\tag.txt"  
echo eingelesener tag ist %tag%
set /a tag+=1
echo tag plus eins ist %tag%
for /L %%i IN (1 1 9) do (
if "%tag%"=="%%i" set tag=0%%i  
if "%tag%"=="0%%i" goto :tagend  
)
:tagend
echo %tag%> C:\tag.txt
echo %tag% in datei geschrieben
pause

Weiß jemand Rat?

Content-Key: 95461

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: bastla
bastla 27.08.2008 um 17:43:00 Uhr
Goto Top
Hallo bufferm44!

Das ist eine der lästigen Kleinigkeiten, mit denen die CMD-Shell so aufwarten kann ...

Eine Zahl, die mit "0" beginnt, wird als Oktalzahl interpretiert - von "00" bis "07" macht das natürlich keinen Unterschied, aber mangels Ziffer "8" im Oktalsystem stellt natürlich "08" keine gültige Zahl mehr dar.

Da der "set /a" Befehl aber auf Teufel komm raus eine Zahl erzeugen will, nimmt er soviel, wie noch "in Ordnung" ist - also nur die führende "0" - und addiert dann 1.

Ein Workaround (als Ersatz der Zeile 3) könnte so aussehen:
set "tag=1%tag%"  
set /a tag+=1
set "tag=%tag:~-2%"  
Damit hast Du dann das Formatierungsproblem auch gleich gelöst ...

Grüße
bastla
Mitglied: bufferm44
bufferm44 27.08.2008 um 19:30:00 Uhr
Goto Top
Zitat von @bastla:
> Das ist eine der lästigen Kleinigkeiten, mit denen die CMD-Shell
so aufwarten kann ...

Oh, oh, oh, das erinnert mich irgendwie an die "enabledelayedexpansion"-Geschichte, man probiert Stunden herum und sucht den "Fehler"..

Vielen Dank!! Auch für die Formatierung!

Grüße

Tobi