Variablen per Loop einlesen - OK. Aber wieder ausgeben ?
Hallo...
gestern stieß ich auf dieses Forum und fand dort Trost und Hilfe - bei diesem Beitrag :
if exist funktioniert nicht bei Verzeichnisnamen mit Leerzeichen
nachdem ich zwei Tage mit dem gleichen Problem verrödelt hatte...
Weil ich schon wieder festsitze, hier meine erste Frage an Euch:
Ich lese in einer Schleife ein paar Namen ein - in Variablen, die mit "set A=Name" initialisiert werden und dann per
"set A=%A%x" weiter gebastelt werden :
set A=Name
:LOOP
set /p B=Name :
if "%B%"=="*" goto :ENDLOOP
set %A%=%B%
set LAST=%A%
set A=%A%x
goto :LOOP
:ENDLOOP
pause
"Bis zur Pause" geht das ganz gut, da ist dann z.B. Name : Hänsel
Namex : Gretel
Namexx : Dornröschen etc
So, jetzt möchte ich die eingelesenen Strings in einer zweiten Schleife zur Kontrolle ausgeben - und da komm' ich nicht weiter ; es scheint mir nicht möglich zu sein, einen Zugriff auf "den Inhalt des Inhalts einer Variablen" zu machen - also wie folgt :
set A=Name
:LOOP1
: --------------------
echo %%A%% Leider geht das nicht...
echo %(%A%)% ... geht auch nicht...
:---------------------
if %A%==%LAST% goto :ENDLOOP1
set A=%A%x
goto :LOOP1
:ENDLOOP1
Auch meine Idee
set B=%A%
echo %B%
war nur ein Traum - nach alter DOS-Logik kommt da auch nur "Namex..." als Ausgabe.
Wer weiß da Hilfe ?
Nächtlichen Gruss von Knirschke zu Kalkstein (voller Hoffnung)
gestern stieß ich auf dieses Forum und fand dort Trost und Hilfe - bei diesem Beitrag :
if exist funktioniert nicht bei Verzeichnisnamen mit Leerzeichen
nachdem ich zwei Tage mit dem gleichen Problem verrödelt hatte...
Weil ich schon wieder festsitze, hier meine erste Frage an Euch:
Ich lese in einer Schleife ein paar Namen ein - in Variablen, die mit "set A=Name" initialisiert werden und dann per
"set A=%A%x" weiter gebastelt werden :
set A=Name
:LOOP
set /p B=Name :
if "%B%"=="*" goto :ENDLOOP
set %A%=%B%
set LAST=%A%
set A=%A%x
goto :LOOP
:ENDLOOP
pause
"Bis zur Pause" geht das ganz gut, da ist dann z.B. Name : Hänsel
Namex : Gretel
Namexx : Dornröschen etc
So, jetzt möchte ich die eingelesenen Strings in einer zweiten Schleife zur Kontrolle ausgeben - und da komm' ich nicht weiter ; es scheint mir nicht möglich zu sein, einen Zugriff auf "den Inhalt des Inhalts einer Variablen" zu machen - also wie folgt :
set A=Name
:LOOP1
: --------------------
echo %%A%% Leider geht das nicht...
echo %(%A%)% ... geht auch nicht...
:---------------------
if %A%==%LAST% goto :ENDLOOP1
set A=%A%x
goto :LOOP1
:ENDLOOP1
Auch meine Idee
set B=%A%
echo %B%
war nur ein Traum - nach alter DOS-Logik kommt da auch nur "Namex..." als Ausgabe.
Wer weiß da Hilfe ?
Nächtlichen Gruss von Knirschke zu Kalkstein (voller Hoffnung)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 59214
Url: https://administrator.de/contentid/59214
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo knirschke und willkommen im Forum!
Um innerhalb eines Variablennamens eine weitere Variable verwenden zu können, muss die "innere" Variable (bei Dir also %A%) zuerst "aufgelöst" (= durch ihren Wert ersetzt) werden.
Damit die Auflösung der "äußeren" Variable (zB %Namexx%) erst danach erfolgt (also "verzögert" wird), muss die "DelayedExpansion" aktiviert werden. Dadurch ändert sich die Kennzeichnung der Variable (nicht "%", sondern "!").
Dein Beispiel sähe dann so aus:
HTH
bastla
Um innerhalb eines Variablennamens eine weitere Variable verwenden zu können, muss die "innere" Variable (bei Dir also %A%) zuerst "aufgelöst" (= durch ihren Wert ersetzt) werden.
Damit die Auflösung der "äußeren" Variable (zB %Namexx%) erst danach erfolgt (also "verzögert" wird), muss die "DelayedExpansion" aktiviert werden. Dadurch ändert sich die Kennzeichnung der Variable (nicht "%", sondern "!").
Dein Beispiel sähe dann so aus:
setlocal enabledelayedexpansion
set A=Name
:LOOP
set /p B=Name :
if "%B%"=="*" goto :ENDLOOP
set %A%=%B%
set LAST=%A%
set A=%A%x
goto :LOOP
:ENDLOOP
pause
set A=Name
:LOOP1
: --------------------
echo !%A%!
:---------------------
if %A%==%LAST% goto :ENDLOOP1
set A=%A%x
goto :LOOP1
:ENDLOOP1
HTH
bastla
... als ergänzende Anmerkung:
So ganz überzeugt mich die oben verwendete Strategie allerdings nicht, da Du ja trotzdem nicht wirklich gezielt auf einzelne Werte zugreifen kannst. Je nachdem, was Du mit den eingegebenen Daten weiter vorhast (und welche Menge davon anfällt), würde ich sie vielleicht ganz einfach in einer Variable sammeln (oder in eine temporäre Textdatei schreiben) und dann zB mit einer "for"-Schleife verarbeiten.
Eine mögliche Umsetzung, die auch die Verwendung von Leerzeichen innerhalb der Eingaben erlaubt, könnte so aussehen:
Die Anführungszeichen dienen dazu, durch Leerzeichen getrennte Namensbestandteile zusammen zu halten. Bei der Ausgabe werden die einschließenden Anführungszeichen mit "~" wieder entfernt.
Grüße
bastla
So ganz überzeugt mich die oben verwendete Strategie allerdings nicht, da Du ja trotzdem nicht wirklich gezielt auf einzelne Werte zugreifen kannst. Je nachdem, was Du mit den eingegebenen Daten weiter vorhast (und welche Menge davon anfällt), würde ich sie vielleicht ganz einfach in einer Variable sammeln (oder in eine temporäre Textdatei schreiben) und dann zB mit einer "for"-Schleife verarbeiten.
Eine mögliche Umsetzung, die auch die Verwendung von Leerzeichen innerhalb der Eingaben erlaubt, könnte so aussehen:
@echo off & setlocal
:LOOP
set /p B=Name:
if "%B%"=="*" goto :ENDLOOP
set A=%A% "%B%"
goto :LOOP
:ENDLOOP
pause
for %%i in (%A%) do echo %%~i
Grüße
bastla
Hallo knirschke!
Freut mich, wenn Du wieder angenehmere Nächte haben kannst ...
Zum Thema Links: Am Besten, Du bleibst einfach gleich hier und siehst Dir vor allem Bibers Tutorials und Kommentare an.
Grüße
bastla
Freut mich, wenn Du wieder angenehmere Nächte haben kannst ...
Zum Thema Links: Am Besten, Du bleibst einfach gleich hier und siehst Dir vor allem Bibers Tutorials und Kommentare an.
Grüße
bastla