Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

Kann aus Bausteinen eine bereits vorhandene Variable abgefragt werden?

Frage Entwicklung Batch & Shell

Mitglied: burningstep

burningstep (Level 1) - Jetzt verbinden

05.10.2014, aktualisiert 14:17 Uhr, 944 Aufrufe, 2 Kommentare

Hallihallo

Als Nicht-Entwickler durfte ich von dieser Seite bereits sehr viel von eurem KnowHow profitieren; an dieser Stelle ein herzliches Dankeschön.

Aktuell bemühe ich mich um die Frage, ob aus vorhandenen Bausteinen/Werten eine bereits definierte Variable abgefragt werden kann. Bisher kriege ich es nicht hin, kann sein das es auch gar nicht funktioniert.

Zur Veranschaulichung nachfolgender Aufbau, in welcher zuerst die Variablen Ist1, Ist2 und Ist3 definiert werden, diese dann je nach Verlauf des Programms beim Binding abgefragt werden sollen.

Der Ausdruck %Ist%Number%% soll zusammen gebaut entweder Ist1, Ist2 oder Ist3 ergeben und beim echo sollte dann entsprechend one, two und three ausgegeben werden, das will mir aber partout nicht gelingen. Ich krieg das nicht richtig zusammen gebaut hin.
01.
@echo off 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
	set Number=%%a 
11.
	call :Binding 
12.
13.
 
14.
pause >nul 
15.
exit 
16.
 
17.
:Binding 
18.
echo %Ist%Number%% 
19.
exit /b
Gefühlt habe ich das in hunderte Varianten versucht, scheitere jedoch kläglich.
Gibt es eine Möglichkeit, das Gewünschte zu erreichen?

Liebe Grüsse aus der Schweiz
burningstep
Mitglied: Friemler
LÖSUNG 05.10.2014, aktualisiert um 14:17 Uhr
Hallo burningstep,

das sollte so gehen:
01.
@echo off & setlocal 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
  set "Number=%%a" 
11.
  call :Binding 
12.
13.
 
14.
pause > NUL 
15.
exit /b 
16.
 
17.
 
18.
:Binding 
19.
  call echo %%Ist%Number%%% 
20.
exit /b
Die Variable %Number% ist aber nicht unbedingt notwendig, man kann den Wert auch als Argument an das Unterprogramm Binding übergeben und das Beispiel folgendermaßen schreiben:
01.
@echo off & setlocal 
02.
 
03.
set Ist1=one 
04.
set Ist2=two 
05.
set Ist3=three 
06.
 
07.
set List=1 2 3 
08.
 
09.
for %%a in (%List%) do ( 
10.
  call :Binding "%%a" 
11.
12.
 
13.
pause > NUL 
14.
exit /b 
15.
 
16.
 
17.
:Binding 
18.
  call echo %%Ist%~1%% 
19.
exit /b
Das entscheidende bei beiden Varianten ist, dass man einen CALL-Befehl vor das ECHO schreibt und die Prozentzeichen verdoppelt, die im Unterprogramm Binding den dynamisch erzeugten Variablennamen umschließen. Dadurch wird der Batchscript-Interpreter dazu gezwungen, die Zeile zweimal zu parsen/auszuwerten.

1. Auswertung
Die Variable %Number% bzw. %1 (die Tilde ~ in %~1 entfernt umgebende Anführungszeichen) wird durch ihren Wert ersetzt und die umschließenden doppelten %-Zeichen werden auf jeweils ein Zeichen reduziert. => Beim ersten Schleifendurchlauf ergibt sich folgende Befehlszeile:
call echo %Ist1%
2. Auswertung
Weil die Befehlszeile den CALL-Befehl enthält, wird sie erneut ausgewertet und dabei festgestellt, dass die Variable %Ist1% durch ihren Wert ersetzt werden muss. Danach wird der CALL-Befehl ausgeführt. Erstes Argument ist das auszuführende Programm bzw. der auszuführende interne Befehl, hier ECHO. Weitere Argumente, hier der Wert von %Ist1%, werden dem auszuführenden Programm bzw. dem auszuführenden internen Befehl als Argumente übergeben. => Es ergibt sich die Befehlszeile
echo one
Gruß
Friemler
Bitte warten ..
Mitglied: burningstep
05.10.2014, aktualisiert um 14:28 Uhr
Hallo Friemler

Vielen lieben Dank für deine Antwort und super Erklärung.
Der call vor dem echo ist für mich neu. Aber ich glaub, ich habe verstanden

Grüsse
burningstep
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
gelöst Mit zusammengesetzter Variable auf andere Variable zugreifen (2)

Frage von abiber zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable in Regedit (3)

Frage von MeinSenfDazu zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable in Makefile durch Shell Command (2)

Frage von nico1999 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

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

Heiß diskutierte Inhalte
Server
Bilder aus dem Web mit CSV runterladen (30)

Frage von Yannosch zum Thema Server ...

Windows Update
WSUS 4 (Server 2012 R2) - Windows 10 Updates nicht möglich (12)

Frage von c0d3.r3d zum Thema Windows Update ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...