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, 918 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Seltsames Verhalten bei Errorlevel abfrage in FOR DO Schleife (1)

Frage von Kalma73 zum Thema Batch & Shell ...

Hardware
Unterstützt mein Laptop einen 1440p 60hz externen Monitor? (2)

Frage von thomasreischer zum Thema Hardware ...

Windows Server
Große Dateien mit externen Partnern bearbeiten (4)

Frage von Matsushita zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...