knirschke
Goto Top

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)

Content-Key: 59214

Url: https://administrator.de/contentid/59214

Printed on: April 24, 2024 at 11:04 o'clock

Member: bastla
bastla May 17, 2007 at 05:47:14 (UTC)
Goto Top
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:
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
Member: bastla
bastla May 17, 2007 at 06:16:11 (UTC)
Goto Top
... 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:
@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
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
Member: knirschke
knirschke May 17, 2007 at 07:19:31 (UTC)
Goto Top
Moin goden Dag bastla !

Da hab' ich mir viele Nachtstunden um die Ohren gehau'n und 4 Std. in EndlosSchleifen von EndlosSchleifen geträumt...

Wo, heiliges Hackbrett, kriegt man solche Infos her (das mit den Ausrufszeichen), wenn nicht von Euch? In den "guten alten Zeiten" hab' ich viele batches geschrieben, aber DAVON nie gehört. Vielleicht gibt es das ja auch erst in dem simulierten DOS.

Würde mich sehr freuen, wenn Du mir einen Link verraten könntest, unter dem ich mein (Un)Wissen etwas updaten kann. Wenn geht mit vielen Beispielen. Die MS-Site ist für mich etwas mühsam zu erfassen...

Vielen Dank erstemaal - auch für die zweite Lösung - die ist ganz klar viel schöner.

Knirschke
Member: bastla
bastla May 17, 2007, updated at Nov 16, 2012 at 21:42:25 (UTC)
Goto Top
Hallo knirschke!

Freut mich, wenn Du wieder angenehmere Nächte haben kannst ... face-wink

Zum Thema Links: Am Besten, Du bleibst einfach gleich hier und siehst Dir vor allem Bibers Tutorials und Kommentare an.

Grüße
bastla