Batch FOR-Schleife

Hallo,

ich habe ein Batch-Datei in der eine For-Schleife durchlaufen wird. Der Teil funktioniert auch super, aber die Operationen in der Schleife und das verketten des Strings leider noch nicht.

var_loop ist die Anzahl der Durchläufe
var_high ist das Maximum
var_low ist das Minimum

for /L %%i in (1,1,%var_loop%) do (
set var_string = %var_string%&%var_high%&%var_low%
set var_high=%var_high%-1
set var_low=%var_low%+1
)

Bei Max = 4 und Min = 1 soll eigentlich ein String rauskommen: 4,1,3,2 oder 4;1;3;2 fertig…derzeit kommt aber 4,1,4,1 als Folge raus (das Komma und die Verkettung funktioniert auch nicht). Man kann aber sehen, dass selbst +/1 nicht funktioniert.

Hallo
Der folgende Code liefert das von dir erwünschte Ergebnis.

@echo OFF
SET var\_loop=2
SET var\_low=1
SET var\_high=4
SET var\_string=

FOR /L %%i IN (1,1,%var\_loop%) DO CALL :loopBody

ECHO %var\_string:~1%
GOTO :EOF


> loopBody

SET var\_string=%var\_string%,%var\_high%,%var\_low%
SET /A var\_high=%var\_high%-1
SET /A var\_low=%var\_low%+1

Die Probleme bei deinem Code waren:

  1. Um in einer for Schleife mehrere Befehle auszuführen ist ein „call marke“ notwendig.
  2. Cmd sieht alle Variablen als string-Typ. Du willst aber 1 addieren bzw suptrahieren -> set /A variable bewirkt dass cmd die variable bei der einen Wertzuweisung als Zahl ansieht und du arithmetische Operationen ausführen kannst.
    Das :~1 beim echo schneidet übrigens das erste Zeichen (hier ein Beistrich) des String ab.
    Viel Vergnügen noch damit :smile:
    Alex