evotoy
Goto Top

Falsche Variablendefinition?

Hi,

hab mich mal wieder an ner kleinen Batch versuch und einen Fehler im Script dem ich einfach nicht auf die Schliche komm ...

ich lese Dateinamen im Format XXX_0000.*. Ich brauch davon nur die letzten vier Zeichen um mit diesen dann Berechnungen anzustellen (zB.: verschiebe jede 5. Datei in Ordner 1; jede 03. in Ordner 5 usw.). Die vier Nummern können alle belegt sein. Die Zeilen dafür sehen im Moment so aus:

@echo off
set Filename=blabla_0004.txt
set Zahl=%Filename:~-4%
set /a ergebnis=Zahl+2
echo %ergebnis%
pause

ich versteh auch was das Problem ist aber ich hab keine Ahnung wie ich es lösen kann. Ich müsste den String sauber in ne Zahl wandeln. Die Nullen vorne werden bei berechnungen eh entfernt, richtig? Hab schon alles möglich ausprobiert aber bekomme immer den selben Fehler.

Content-ID: 277072

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

Ausgedruckt am: 25.11.2024 um 02:11 Uhr

rubberman
Lösung rubberman 11.07.2015 aktualisiert um 12:48:01 Uhr
Goto Top
Hallo evotoy,

es gibt mehrere Fehler. Die letzten 4 Zeichen deines Dateinamens sind ".txt" und nicht "0004". Eine Zahl, die eine vorangestellte 0 hat, wird mit SET /A als oktale Zahl interpretiert.
@echo off
set "Filename=blabla_0004.txt"  
for %%i in ("%Filename%") do (  
  set "basename=%%~ni"  
  set "extension=%%~xi"  
)
set /a "ergebnis=1%basename:~-4% + 2"  
echo %basename:~0,-4%%ergebnis:~-4%%extension%
pause
Grüße
rubberman
evotoy
evotoy 11.07.2015 um 12:47:55 Uhr
Goto Top
Hallo rubberman,

ja stimmt ... hab das vorhin manuell eingefügt und das .txt dabei übersehen. Ich frag eigentlich auch mit %%~ni den Namen ab.

zum Verständnis: du hast die oktale Zahl 0004 auf 10004 "expandiert" und damit gerechnet? wenn ich eine richtige Zahl raubekommen möchte wäre das dann

@echo off
set "Filename=blabla_0004.txt"  
for %%i in ("%Filename%") do set "basename=%%~ni"  
set /a "ergebnis=1%basename:~-4% + 2 -10000"  
echo %ergebnis%
pause

Super Danke!
rubberman
rubberman 11.07.2015 aktualisiert um 13:00:33 Uhr
Goto Top
Hallo evotoy.

-10000
Ja, entweder Subtraktion (wobei +2 -10000 auch mit -9998 zu erledigen wäre) oder Modulo.
set /a "ergebnis=(1%basename:~-4% + 2) %% 10000"

Grüße
rubberman