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

Variablen per Loop einlesen - OK. Aber wieder ausgeben ?

Frage Entwicklung Batch & Shell

Mitglied: knirschke

knirschke (Level 1) - Jetzt verbinden

17.05.2007, aktualisiert 09:39 Uhr, 4364 Aufrufe, 4 Kommentare

Hallo...

gestern stieß ich auf dieses Forum und fand dort Trost und Hilfe - bei diesem Beitrag :
http://www.administrator.de/if_exist_funktioniert_nicht_bei_Verzeichnis ...
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)
Mitglied: bastla
17.05.2007 um 07:47 Uhr
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:
01.
setlocal enabledelayedexpansion 
02.
set A=Name 
03.
:LOOP 
04.
set /p B=Name : 
05.
if "%B%"=="*" goto :ENDLOOP 
06.
 
07.
set %A%=%B% 
08.
set LAST=%A% 
09.
set A=%A%x 
10.
goto :LOOP 
11.
 
12.
:ENDLOOP 
13.
pause 
14.
 
15.
set A=Name 
16.
:LOOP1 
17.
: -------------------- 
18.
echo !%A%! 
19.
:--------------------- 
20.
if %A%==%LAST% goto :ENDLOOP1 
21.
set A=%A%x 
22.
goto :LOOP1 
23.
 
24.
:ENDLOOP1
HTH
bastla
Bitte warten ..
Mitglied: bastla
17.05.2007 um 08:16 Uhr
... 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:
01.
@echo off & setlocal 
02.
:LOOP 
03.
set /p B=Name: 
04.
if "%B%"=="*" goto :ENDLOOP 
05.
 
06.
set A=%A% "%B%" 
07.
goto :LOOP 
08.
 
09.
:ENDLOOP 
10.
pause 
11.
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
Bitte warten ..
Mitglied: knirschke
17.05.2007 um 09:19 Uhr
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
Bitte warten ..
Mitglied: bastla
17.05.2007, aktualisiert 16.11.2012
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

C und C++
String einlesen in Array und wieder ausgeben von hinten (4)

Frage von Protected zum Thema C und C ...

Batch & Shell
gelöst Erstellen von Verknüpfungen mithilfe einer Variablen (3)

Frage von ciNNEx zum Thema Batch & Shell ...

Sonstige Systeme
UEFI Variablen beim Bootvorgang - Herunterfahren? (4)

Frage von Kedakai zum Thema Sonstige Systeme ...

Neue Wissensbeiträge
RedHat, CentOS, Fedora

Fedora, RedHat, Centos: DNS-Search Domain setzen

(13)

Tipp von Frank zum Thema RedHat, CentOS, Fedora ...

Drucker und Scanner

Samsung SL-M4025ND, firmware update und (kompatible) Tonerkassetten

(1)

Erfahrungsbericht von markus-1969 zum Thema Drucker und Scanner ...

Heiß diskutierte Inhalte
Batch & Shell
Skripterstellung Lehrling (21)

Frage von 133119 zum Thema Batch & Shell ...

Java
gelöst Net user per script aus txt oder csv für FTP (15)

Frage von OlliPWS zum Thema Java ...

Exchange Server
Microsoft Exchange Weiterleitung mit anderer primären E-Mail Adresse (14)

Frage von Rene12345 zum Thema Exchange Server ...

LAN, WAN, Wireless
IP im privaten Netz nicht erreichbar (14)

Frage von guntis zum Thema LAN, WAN, Wireless ...