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

Mitglied: Nagus

Nagus (Level 2) - Jetzt verbinden

05.01.2011 um 14:47 Uhr, 7258 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

Powershell - Eine Variable zusammensetzen

gelöst Frage von adm2015Batch & Shell2 Kommentare

Hallo zusammen, ich hab gerade ein Problem und finde irgendwie nicht die richtige Lösung. Vielleicht könnte mir jemand ein ...

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 ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 21 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 22 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server24 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

LAN, WAN, Wireless
Gigabit-Lan mit zwei 4-adrigen Kabeln?
Frage von ArvedirmerLAN, WAN, Wireless11 Kommentare

Ich habe folgendes Problem: Ich betreue eine kleine Firma die sich im 1.Stock eines Gebäudes befindet. Es existiert ein ...

Datenschutz
Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10
Information von Penny.CilinDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...