Wie kann ich in Batch aus 2 For loops beide Werte in eine Variable schreiben?

...komplette Frage anzeigen

1 Antwort

Um Variablen innerhalb von Klammern effektiv verwenden zu können, musst du den Befehl "Setlocal EnableDelayedExpansion" vorher einmalig verwendet haben und die Variablen mit ! statt mit % aufrufen.

Außerdem hast du einen Formelfehler drin, hier der Code mit richtiger Formel:

Setlocal EnableDelayedExpansion
FOR /L %%y in (0,1,19) DO (
  FOR /L %%x in (0,1,57) DO (
    set /a Progress=^(%%y * 58 + %%x + 1^) * 100/1160
    echo !Progress!%%
  )
)

Die ^ vor den Klammern ermöglichen ihre Nutzung auch innerhalb des FOR-Befehls, ohne dass CMD denkt, die schließende Klammer würde FOR schließen.

Ohne FOR-Befehl und ohne SETLOCAL geht das wie folgt:

set mmy=-1
:loop_y
if %mmy%==19 goto EndLoop
set mmx=-1
set /a mmy+=1
:loop_x
  set /a mmx+=1
  set /a Progress=(%mmy% * 58 + %mmx% + 1) * 100/1160
  echo %Progress%%%
  if %mmx%==57 goto loop_y
goto loop_x
:EndLoop

Über FOR ist der Prozess aber erheblich schneller.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von maximilianus7
24.01.2016, 15:18

oops, da warst du schneller als ich. ich hab mir fast die finger blutig gegoogelt, bis ich das mit dem "Setlocal EnableDelayedExpansion" gefunden habe.

finde ich ziemlich krank. also nicht deine lösung, sondern was sich MS da ausgedacht hat.

ich würde dem fragesteller dringlichst empfehlen, auf visual basic script (VBS) umzusteigen. das hat man schneller gelernt, als man das for-kommando verstanden hat. und ist besser dokumentiert.

auch wenns auch seine eigenheiten hat.

0

Was möchtest Du wissen?