Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: Juergenl

Juergenl (Level 1) - Jetzt verbinden

25.08.2014, aktualisiert 26.08.2014, 952 Aufrufe, 4 Kommentare

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
Mitglied: bastla
LÖSUNG 25.08.2014, aktualisiert 26.08.2014
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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set /a lfdnum=0 
03.
for /L %%i in (1,1,7) do if %%i lss 5 set /a lfdnum+=1 & echo Anzahl: !lfdnum!
Grüße
bastla
Bitte warten ..
Mitglied: Juergenl
26.08.2014, aktualisiert um 18:52 Uhr
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>
Bitte warten ..
Mitglied: bastla
LÖSUNG 26.08.2014, aktualisiert 27.08.2014
Hallo Juergenl!

Freut mich, wenn's hilft ...

... 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
Bitte warten ..
Mitglied: Juergenl
27.08.2014 um 07:02 Uhr
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>
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Werte in Variable durch Schleife erweitern bzw. ändern (5)

Frage von ralfkausk zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit zusammengesetzter Variable auf andere Variable zugreifen (2)

Frage von abiber zum Thema Batch & Shell ...

Batch & Shell
Schleife mit todos CMD

Frage von TommyDerWalker zum Thema Batch & Shell ...

Batch & Shell
gelöst SAP Externes Programm Parameterübergabe an Skript in Variable (2)

Frage von Erik72 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Firewall
Richtige Grundeinstellungen der Pfsense für mein Netzwerk (14)

Frage von Spitzbube zum Thema Firewall ...

Switche und Hubs
gelöst Cisco 2960x Stacking über mehrere Etagen (12)

Frage von b3scher zum Thema Switche und Hubs ...