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, 4343 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 ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ä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 Powershell: Variablen aus .txt Dateien heraus ausgeben (5)

Frage von Tobiased zum Thema Batch & Shell ...

LAN, WAN, Wireless
gelöst HP Switches - Frage zu Spanning Tree bzw. Loop Back Protection (12)

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

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...