Batch zähler erhöhen

Ikarus_sun

Newbie
Registriert
Juli 2017
Beiträge
5
Hallo Leute!

Ich verstehe nicht wieso mein Zähler in der For schleife erhöht wird. Vielleicht ist der Fehler so einfach, dass ich ihn nicht sehe :). Die save.txt Datei besteht aus 3 Zeilen. Es sind 2 Zahlen und ein Wort

FOR /f %%f IN (save.txt) DO (

if %zaehler%==0 (set /a xx=%%f)
if %zaehler%==1 (set /a yy=%%f)
if %zaehler%==2 (goto zz)

echo %zaehler%
set /a zaehler+=1
)

pause

Bitte um Hilfe
 
Danke für die Antwort.

Ich möchte ja dass "zaehler" um 1 erhöht wird. Also jedes mal wenn ich die Schleife nochmal beginne. Aber leider wird der "zaehler" nicht erhöht.
Ich habe den Befehl schon außerhalb der Schleife probiert und er funktioniert. Allerdings funktioniert er nicht innerhalb der Schleife. Ich habe die Variable "zaehler" auch vorher initialisiert und mit dem Wert 0 belegt. Jedoch bleibt der Wert immer derselbe.
Die Ausgabe ist
0
0
0
 
Versuche es mal damit:
Code:
setlocal enableDelayedExpansion

set /a zaehler = 0
FOR /f %%f IN (save.txt) DO (

if !zaehler! == 0 (set /a xx=%%f)
if !zaehler! == 1 (set /a yy=%%f)
if !zaehler! == 2 (goto :zz)

echo !zaehler!
set /a zaehler+=1

)

:zz
pause
 
hmm also da sind doch nur die "%" durch "!" ausgetauscht. Ich habs gemacht. Das einzige was rauskommt ist eine Fehlermeldung. Nämlich dass er den Befehl !zaehler! nicht kennt..
 
Hast du auch die Zauberformel benutzt?
Code:
setlocal enableDelayedExpansion
 
Wow es funktioniert. Wirklich interessant. Danke!!!
Ich habe diesen Ausdruck "setlocal enableDelayedExpansion" nie gesehen. Was war da jetzt eigentlich der Fehler? Ich habe mir einfach gedacht Batch ist in einer For-Schleife eingeschränkt..
 
In gewisser Hinsicht stimmt das mit der Einschränkung in for-Schleifen. Variablenexpansion findet für alle Variablen innerhalb der for-Schleife nur einmal zu Beginn der Schleife statt. Dass das manchmal nicht erwünscht ist, hat auch Microsoft erkannt und deshalb die verzögerte Variablenexpansion ermöglicht. Um nun zu unterscheiden, ob das frühere Verhalten oder das neuere verzögerte verwendet werden soll, haben sie die Ausrufezeichen eingeführt, die bei jedem Schleifendurchlauf ausgewertet werden.
Code:
@echo off
setlocal enableDelayedExpansion
set /a nanu = 7
echo nanu und nanu: %nanu% !nanu!

for /L %%I in (0,1,3) do (
  set /a nanu = %%I
  echo I nanu und nanu: %%I %nanu% !nanu!
)
ergibt diese Ausgabe:
Code:
nanu und nanu: 7 7
I nanu und nanu: 0 7 0
I nanu und nanu: 1 7 1
I nanu und nanu: 2 7 2
I nanu und nanu: 3 7 3
 
ah ok interessant. Da schein Batch doch einzigartig zu sein. Denn in den Sprachen was ich bis jetzt gelernt habe, waren solche Variablenexpansionen in For Schleifen problemlos möglich.
 
Zurück
Oben