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

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

Printed on: April 26, 2024 at 05:04 o'clock

Member: rubberman
Solution rubberman Jul 11, 2015 updated at 10:48:01 (UTC)
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
Member: evotoy
evotoy Jul 11, 2015 at 10:47:55 (UTC)
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!
Member: rubberman
rubberman Jul 11, 2015 updated at 11:00:33 (UTC)
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