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

Variable aus mehreren Variablen zusammensetzen - in einer For Schleife

Frage Entwicklung Batch & Shell

Mitglied: Nagus

Nagus (Level 2) - Jetzt verbinden

05.01.2011 um 14:47 Uhr, 7206 Aufrufe, 9 Kommentare

Moin,
ich scheitere gerade beim zusammenbasteln von Variablen. Ist vermutlich total idiotisch - ich komme aber gerade nicht drauf ...

1. Ich habe eine Anzahl Variablen Var10 - Var24 die entweder 0 oder 1 sind.
2. Mit einer For-Schleife möchte ich Var generieren und dann prüfen. Var ist ja immer fest, und nur die Zahl ändert sich. Also dachte ich etwas in der Form %Var%%i%

01.
set/A Var10=0 
02.
set/A Var12=1 
03.
set/A Var14=0 
04.
set/A Var24=0 
05.
for /L %%i in (10,1,24) do %Var%%i%==1 echo Var10= Ja else echo Var10= Nein
Das funktioniert nicht ... wie wäre denn richtig oder geht es so überhaupt nicht?

Zweiter Ansatz war

01.
for /L %%i in (10,1,24) do set TmpVar=Var%%i && if %TmpVar%==1 echo Var10= Ja else echo Var10= Nein
Wenn ich es so mache, wäre ja TmpVar zwar gleich der Variablen VarXX aber ich möchte ja den Inhalt der Variablen VarXX und nicht den Inhalt VarXX

Hilfe ....

Gruß
Nagus der verzweifelte
Mitglied: bastla
05.01.2011 um 15:09 Uhr
Hallo Verzweifelter !

Was Du vermutlich möchtest, ist:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set/A Var10=0 
03.
set/A Var12=1 
04.
set/A Var14=0 
05.
set/A Var24=0 
06.
for /L %%i in (10,1,24) do if !Var%%i!==1 (echo Var%%i=Ja) else (echo Var%%i=Nein)
oder ev auch:
01.
@echo off & setlocal enabledelayedexpansion 
02.
set/A Var10=0 
03.
set/A Var12=1 
04.
set/A Var14=0 
05.
set/A Var24=0 
06.
for /L %%i in (10,1,24) do if defined Var%%i if !Var%%i!==1 (echo Var%%i=Ja) else (echo Var%%i=Nein)
Grüße
bastla
Bitte warten ..
Mitglied: Nagus
05.01.2011 um 18:55 Uhr
Jippiiieeee!
Genau so funktioniert es! Deine Zweite Lösung ist sogar noch passender!

Aber jetzt möchte ich es auch noch verstehen:
01.
@echo off & setlocal enabledelayedexpansion 
Dadurch werden erst alle Werte in der For Schleife angezeigt. Warum brauche ich das?

Was passiert durch die ! bei !Var%%i!==1 ??? Offensichtlich kann ich mir die Variablen auch per echo !Variable! anzeigen lassen. Was ist der Unterschied zu %Variable%? Ich kannte bisher nur das ....

Viele Grüße
Nagus der glückliche
Bitte warten ..
Mitglied: mathe172
05.01.2011 um 19:49 Uhr
Hallo Nagus!

Das "@echo off" bedeute0 (auseinandergerissen):
"@":Zeige den Nachfolgenden Befehl nicht an
"echo off" Schalte die Ausgabe aus; So wird nur noch das angezeigt, was du mit "echo" ausgeben willst

Das "&": Verknüpft Befehle (in eine neue Zeile Schreiben ginge auch)

Das "setlocal enabledelayedexpansion ":Schaltet die verzögerte Variablenexpansion ein.
Das bedeutet: Normalerweise wird ein Befehl vom Interpreter(cmd) angeschaut und alle Variablen durch den Wert ersetzt. Dann wird der Befehl ausgeführt.
Das Problem: Eine For-Schleife ist ein Befehl--> Das heisst, alle verwendeten Variablen werden am Anfang durch ihren Inhalt ersetzt und dann die Schleife abgearbeitet. (Ausnahme: Die Laufvariablen (zB: %%A))
Ist die verzögerte Variablenexpansion eingeschaltet, kann man dem Interpreter sagen, dass er die Variablen zB. in jedem Durchgang erneut auswerten soll. Dies geschieht durch die "!" (statt den "%")

-->(Obiges Beispiel):
Der Ausdruck "!Var%%i!" heisst: Schaue in jedem Schleifendurchgang den Wert der Variable an. Also:
1. Durchgang: Var1= ?
2. Durchgang: Var2= ?
3. Durchgang: Var3= ?
...

Hier ein anderes Beispiel:
01.
@echo off 
02.
set /a "Var=0" 
03.
echo Ohne verzögerter Variablenexpansion: 
04.
REM Hier schaut der Interpreter den Inhalt der Varaible am Anfang an: Der Wert ist "0". Nun rechnet er in jedem Durchgang 0+1=1 
05.
for /L %%A in (1,1,10) do set /a Var=%Var%+1 
06.
echo %Var% 
07.
setlocal enabledelayedexpansion 
08.
set /a "Var=0" 
09.
echo Mit verzögerter Variablenexpansion: 
10.
REM Hier schaut der Interpreter den Inhalt der Varaible in jedem Durchgang an: Der Wert ist am Anfang 0. Nun rechnet er im 1. Durchgang: 0+1=1 
11.
REM Im 2. schaut er wieder den WErt von Var an:1 
12.
Nun rechnet er im 2. Durchgang: 1+1=2 
13.
for /L %%A in (1,1,10) do set /a Var=!Var!+1 
14.
REM Wichtig: Mit "!" einschliessen! 
15.
echo %Var%
[edit: Nachtrag:
Das von dir verwendete "%var%%i%" hat noch ein Problem: Der Interpreter sucht nach zwei Variablen: %var% und %i%.
Dies ist auch der Fall wenn man zB. ausserhalb eine Schleife den Inhalt eine Variable mit einer Variable im Namen verwenden will: Etwa "%Variable%Namenszusatz%%"
Der Interpreter würde nach %Variable% und %% suchen (der Teil "Namenszusatz") würde einfach als Zeichenkette angesehen werden
Deshalb kann man in dem Fall auch ausserhalb einer Schleife die "!" verwenden (nur mit "setlocal enabledelayedexpansion")
Beispiel:
01.
@echo off & setlocal enabledelayedexpansion 
02.
REM 20 Varaiblen mit Inhalt erzeugen: 
03.
For /L %%A in (1,1,20) do set "Var%%A=%%A" 
04.
:Loop 
05.
set /p "VarNr=Von der wievielten Variable willst du den Wert wissen? " 
06.
echo Ohne verzögerter Variablenexpansion: %Var%VarNr%% 
07.
echo Mit verzögerter Variablenexpansion: !Var%VarNr%! 
08.
pause>nul 
09.
cls 
10.
goto :Loop
]

Ich hoffe es ist verständlich
Mathe172
Bitte warten ..
Mitglied: Nagus
05.01.2011 um 20:30 Uhr
Hi Mathe172,
danke erstmal für die Ausführliche Erklärung!

Das mit dem @echo off ist klar Ein bisschen Ahnung habe ich schon ....

setlocal enabledelayedexpansion war nicht so klar, aber habe ich verstanden.

Das heißt doch: wenn ich die Verzögerung nutze - muss ich ! anstatt % nehmen. Mit diesem Ausdruck %Variable% würde ich also immer den ersten Wert bekommen.

Was passiert bei !Variable! ohne enabledelayedexpansion?

Viele Grüße
Nagus der erleuchtete
Bitte warten ..
Mitglied: Biber
05.01.2011 um 20:44 Uhr
Moin Nagus,


Zitat von Nagus:
Was passiert bei !Variable! ohne enabledelayedexpansion?
Was passiert denn, wenn du einen Busfahrschein in den ec-Kartenleser an der Supermarktkasse schiebst?
Oder wenn du versuchst einen Pudding zu toasten?

Batch ist zwar manchmal etwas kryptisch, aber ein klitzekleines Bisschen hat es doch mit den ansonsten üblichen Gesetzen der Logik zu tun.

Nochmal: "verzögerte Variablenauflösung" funktioniert nur unter zwei Bedingungen
a) es muss von dir angekündigt werden wie ein "Kontra" beim Doppelkopf, nur auf outlandish mit "SetLocal EnableDelayedExpansion".
b) nach der Ankündigung kannst du sowohl Variablen "wie immer" anfassen als %variable% -oder- als !variable! "verzögert"==im letzten Moment ermittelt.

wenn Bedingung a) nicht gegeben ist, dann hast du gar keine Oder-Option bei b), denn du kannst gar keine !variable!'n ansprechen.
Oder beim Doko: wenn du nicht "kontra" angesagt hast, dann zählt nix doppelt.

Grüße
Biber, der geduldige
Bitte warten ..
Mitglied: bastla
05.01.2011 um 20:48 Uhr
@mathe172

Und dann wäre da noch:
01.
set /a "Var=0" 
02.
for /L %%A in (1,1,10) do set /a Var+=1 
03.
echo %Var%
Grüße
bastla
Bitte warten ..
Mitglied: jeb-the-batcher
05.01.2011 um 22:36 Uhr
Dank der guten Erklärungen, ist dann auch offensichtlich wieso hier

01.
@echo off 
02.
setlocal EnableDelayedExpansion 
03.
set "^=Ein Dach" 
04.
set "^^=Doch zwei" 
05.
set "EinDach=^" 
06.
call echo %%!EinDach!%%
Natürlich als Ausgabe "Doch zwei" rauskommt.

Grüße
jeb, der bastl-er
Bitte warten ..
Mitglied: Nagus
06.01.2011 um 12:24 Uhr
Okay, also
Zitat von Biber:
> Zitat von Nagus:
> ----
> Was passiert bei !Variable! ohne enabledelayedexpansion?
Was passiert denn, wenn du einen Busfahrschein in den ec-Kartenleser an der Supermarktkasse schiebst?
Oder wenn du versuchst einen Pudding zu toasten?

Weiß ich noch nicht - muss ich mal testen
Jaja - war ne blöde Frage, ich habe es inzwischen auch noch mal getestet ...

Nagus, der reumütige
Bitte warten ..
Mitglied: Nagus
06.01.2011 um 12:40 Uhr
Prima! Mission Accomplished!

Das verstehe ich jetzt nicht mehr ...

Nagus ?????
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Mehrere Werte aus FOR Schleife in eine Variable
gelöst Frage von sugramBatch & Shell4 Kommentare

Hallo Also ich komm einfach nicht weiter. Folgendes Problem. Meine aktueller String lautet so: Das Funktioniert auch. Nur ist ...

Batch & Shell
Batchprogrammierung - FOR Schleifen - Speichern in Variablen - Ausgabe der Variablen
gelöst Frage von JimStarBatch & Shell6 Kommentare

Guten Tag zusammen, ich habe ein kleines Problem und komme alleine nicht weiter. Folgende Situation: Ich hab ein Batchprogramm ...

Batch & Shell
Weitergabe von Variablen in for-Schleifen
Frage von MFJustBatch & Shell1 Kommentar

Hallo, Ich versuche HTML Dateien in PDFs umzuwandeln (dies funktioniert) und diese dabei nach Teilen dieser HTML Datei umzubenennen ...

Batch & Shell
Batch Variablen in for-Schleife
gelöst Frage von Dacki1107Batch & Shell2 Kommentare

Hallo Liebe Administratoren Ich kämpfe mit einem kleinen Problemchen und hoffe das Ihr mir helfen könnt. Ich versuche eine ...

Neue Wissensbeiträge
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 8 StundenViren und Trojaner1 Kommentar

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 12 StundenRouter & Routing

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

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
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 ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware8 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...