juergenl

Umgang mit externen Variablen innerhalb einer FOR ... DO Schleife ...

Hallo BATCH'elors ..

mein oben beschriebene Aufgabenstellung habt Ihr Euch sicher längt an den Schuhsolen abgelaufen .. - ich bitte daher höflich um Eure - nachsichtige - Hilfe:

Ich wüßte gerne, wie man in einer (zudem verschachtelten) FOR-Schleife mit solchen (externen) Variablen umgehen muß, die nicht zum internen Vorrat, wie %%i , %%j gehören:

1.) Ich versuche, mit Hilfe einer geschachtelten FOR-DO-Schleife, Bildschirm-Farben ("COLOR xy") je nach Farb- und Helligkeits-Kontrast auf günstige Brauchbarkeit zu untersuchen ...

2.) Dabei würde ich gerne innerhalb der Schleife einen Zählvorgang - etwa bezüglich brauchbar erscheinender Farbkombinationen - in Gang setzen: Als Neuling habe ich zunächst ausserhalb der Schleife - zwecks Initialisierung der Variablen 'lfdnum' begonnen mit

SET /A lfdnum=0

- danach wollte ich bei jedem Treffer innerhalb der Schleife fortsetzen mit

SET /A lfdnum=%lfdnum% + 1

Dieses Vorgehen ist mir in harmloseren Fällen (Geradeaus-Programmierung, auch in SUB-Routinen) durchaus bereits gelungen. Hingegen schaffe ich es nicht, - experimentell, etwa per Verdopplung von Prozent-Zeichen o.ä. - die Variable 'lfdnum' innerhalb der Schleife - im Fall dortiger Erfolgs-Treffer - zu inkrementieren.

- dabei begehe ich vielmehr wohl einen grundsätzlichen - formalen - Fehler, - was die "Welten" der Variablen innerhalb und ausserhalb solcher Schleifen betrifft. Dies verläuft im übrigen aber ohne jede berüchtigte Fehlermeldung "Syntaxfehler".

- würde mich mich bitte jemand über dieses Dilemma aufkläen .. - danke im Voraus für jede erdenkliche Hilfe!

Mit freundlichen Grüßen
Juergenl
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 247375

Url: https://administrator.de/forum/umgang-mit-externen-variablen-innerhalb-einer-for-do-schleife-247375.html

Ausgedruckt am: 02.05.2025 um 15:05 Uhr

bastla
Lösung bastla 25.08.2014, aktualisiert am 26.08.2014 um 18:50:10 Uhr
Goto Top
Hallo Juergenl!

Wenn Du nur zählen willst, einfach
set /a lfdnum+=1
und die Anzahl nach Beendigung der Schleife ausgeben.

Willst Du den aktuellen Wert des Zählers auch innerhalb der Schleife verwenden / ausgeben, benötigst Du "delayedExpansion" (siehe zB Tutorial zur FOR-Schleife) - etwa:
@echo off & setlocal enabledelayedexpansion
set /a lfdnum=0
for /L %%i in (1,1,7) do if %%i lss 5 set /a lfdnum+=1 & echo Anzahl: !lfdnum!
Grüße
bastla
Juergenl
Juergenl 26.08.2014 aktualisiert um 18:52:11 Uhr
Goto Top
Hallo Bastla,

besten Dank für Deine schnelle Hilfe! Damit ist nicht nur dieses Problem gelöst, - vielmehr habe ich damit auch weitere Erfahrungen gewonnen ...

Die kompakte Notation SET /A lfdnum+=1 zum Inkrementieren der Schleifenvariablen ist durchaus praktisch, war mir aber nicht (mehr?) geläufig. Ab jetzt gehört sie also zu 'meinem' Befehlsvorrat.

Mein vorheriges Mißverständnis lag im übrigens an anderer Stelle: Die Schreibweise

SET /A lfndnum=%lfndnum% + 1

scheitert hier offenbar an der falschen Variablen-Auflösung %lfdnum%: Wenn man nämlich diesen Ausdruck durch !lfdnum! ersetzt, funktioniert auch das innerhalb meiner FOR-Schleife. ( - ich habe offenbar diese Strategie - oder Regeln - zur Erweiterung von Variablen immer noch nicht richtig verstanden: In dieser Situation werde ich wohl jedes Mal wieder experimentieren müssen .. )

Danke auch für den Hinweis auf 'EnableDelayedExpansion': Diese Option habe ich hier auch angewendet, weil ich innerhalb dieser FOR-Schleife regelmäßig Einträge in eine Textdatei vornehmen will, wobei gerade diese Variable %lfdnum% eine bestimmende Rolle spielt.

Danke noch einmal und freundliche Grüße

Jürgen
<Juergenl>
bastla
Lösung bastla 26.08.2014, aktualisiert am 27.08.2014 um 06:57:56 Uhr
Goto Top
Hallo Juergenl!

Freut mich, wenn's hilft ... face-smile

... und BTW: Die Schreibweise "!lfdnum!" ergibt sich ja aus der Verwendung der "delayedExpansion" ("!" anstatt "%" dient der Kennzeichnung jener Variablen, die "verzögert" - also nicht schon bei Beginn der Verarbeitung zB der Schleife - aufgelöst / ausgewertet werden sollen) ...

Grüße
bastla
Juergenl
Juergenl 27.08.2014 um 07:02:34 Uhr
Goto Top
Hallo Bastla,

DAS ist doch eine klare Ansage! Ich habe mir die Zusammenhänge jetzt auch in allen Varianten praktisch vor Augen geführt, - hat geholfen!

Danke und freundliche Grüße

Jürgen
<Juergenl>