2016-07-19 1 views
0

Ich extrahiere zwei Ziffern und füge eins hinzu. Aber wenn die letzten beiden Ziffern 08 sind, wird der obige Fehler ausgegeben.Stapelfehler: Numerische Konstanten sind entweder dezimal (17), hexadezimal (0x11) oder oktal (021).

set last_two=!file_name:~-2,2! 
set /a add_millisec=!last_two!+1 
set add_millisec=0!add_millisec! 
set add_millisec=!add_millisec:~-2! 

Kann jemand bitte überprüfen und mir hier helfen ...

+2

Mögliche Kopie von [Ungültige Nummer. Numerische Konstanten sind entweder dezimal (17), hexadezimal (0x11) oder oktal (021)] (http://stackoverflow.com/questions/9762794/invalid-number-numeric-constants-are-either-decimal-17-hexadecimal) -0x11-o) –

+0

Konstanten beginnen mit 0 sind Oktalwerte, aber 8 und 9 ist keine gültige Oktalziffer, daher haben Sie den Fehler –

+0

Ja, da 8 und 9 keine Oktalziffern sind, bekomme ich diesen Fehler .. ist es gibt keine Möglichkeit, ich kann dies vermeiden und weiter mit meinem Fluss – Bharath

Antwort

3

Öffnen Sie eine Eingabeaufforderung und geben Sie set /?:

[...] Numeric values are decimal numbers, unless prefixed by 0x for hexadecimal numbers, and 0 for octal numbers. So 0x12 is the same as 18 is the same as 022. Please note that the octal notation can be confusing: 08 and 09 are not valid numbers because 8 and 9 are not valid octal digits. [...]

Sie werden feststellen, dass set /A behandelt Zahlen mit führenden 0 als Oktal Zahlen.

Um dies zu überwinden, können Sie folgendes tun:

  1. Präfix die Zahl mit 1 und entfernen Sie sie wieder nach den Berechnungen:

    set last_two=1!file_name:~-2,2! 
    set /A add_millisec=last_two+1 
    set add_millisec=!add_millisec:~-2! 
    

    Dafür benötigen Sie die Gesamtzahl wissen von Ziffern im Voraus.

  2. Entfernen Sie die nachfolgenden Nullen vor irgendwelchen Berechnungen und Pad das Ergebnis mit führenden Nullen danach je nach Bedarf:

    set last_two=!file_name:~-2,2! 
    rem The following line removes all leading zeros: 
    for /F "tokens=* delims=0" %%Z in ("!last_two!") do set last_two=%%Z 
    set /A last_two+=0 & rem this avoids `last_two` to be empty if it is `0` 
    set /A add_millisec=last_two+1 
    set add_millisec=0!add_millisec! 
    set add_millisec=!add_millisec:~-2! 
    

    Oder:

    set last_two=!file_name:~-2,2! 
    rem The following two lines remove all leading zeros: 
    cmd /C exit !last_two! 
    set /A last_two=!ErrorLevel! 
    set /A add_millisec=last_two+1 
    set add_millisec=0!add_millisec! 
    set add_millisec=!add_millisec:~-2! 
    

    Diese Methode ist flexibler als Sie wissen nicht, die Anzahl an Ziffern.

Verwandte Themen