Top-Themen

Aktuelle Themen (A bis Z)

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, 4391 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
FOR Loop Variablen ( Batch )
gelöst Frage von clragonBatch & Shell2 Kommentare

Hey Leute. Ich schreib grad an einem script rum und hab folgendes Problem: Die Variable eines FOR loop meines ...

Batch & Shell
Powershell intelligent Variablen einlesen
Frage von PinkFLuffyUnicornBatch & Shell5 Kommentare

Hi, ich habe folgendes Problem: Ich hzabe eine Textdatei aus welcher ich gerne zeilenweise variablen auslesen und in einer ...

Batch & Shell
Variable aus VBS in Batch einlesen
gelöst Frage von racer1601Batch & Shell4 Kommentare

Hallo ich habe das Problem das ich die Variable "Ordner" aus einem VBS Script nicht in meine Batch bekomme. ...

C und C++
String einlesen in Array und wieder ausgeben von hinten
Frage von ProtectedC und C++4 Kommentare

Hallo, ich würde gerne einen String einlesen bzw. char und dann andersrum wieder ausgeben. Also: Otto Maoam zu: maoaM ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 7 StundenWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 9 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...