zensbert
Goto Top

Variable erweitern

Hi,
Ich würde gerne eine variable erweitern, z.b. so:

if %a_inst% == 1 set variable=A
if %b_inst% == 1 set variable=B
if %C_inst% == 0 set variable=C

dann muss am Ende Variable = "A B" sein

if %a_inst% == 1 set variable=A
if %b_inst% == 0 set variable=B
if %C_inst% == 1 set variable=C

dann muss am Ende Variable = "A C" sein

Kann mir da jemand helfen, muss ich set mit einem Parameter starten?

Danke!

Content-ID: 237085

Url: https://administrator.de/contentid/237085

Ausgedruckt am: 24.11.2024 um 16:11 Uhr

rubberman
rubberman 03.05.2014 um 14:02:04 Uhr
Goto Top
Hallo zensbert.

Ich nehme an du willst immer mit 1 vergleichen.
Teste:
@echo off &setlocal
set /a "a_inst=1, b_inst=1, c_inst=0"  
set "variable="  

setlocal EnableDelayedExpansion
for %%i in (A B C) do if !%%i_inst! == 1 set "variable=!variable!%%i "  
endlocal &set "variable=%variable:~,-1%"  

echo %variable%
pause
Grüße
rubberman
zensbert
zensbert 03.05.2014 um 14:12:54 Uhr
Goto Top
Hi,
Das funktioniert für dein Beispiel super, aber wenn ich 40 Variablen abprüfen muss wird das so sehr problematisch, oder? die variablen haben immer den wert 0 oder 1, richtig. die variablen haben eine andere Präfix als a,b,c dass hatte ich nur der einfachheit halber so gepostet damit man es leichter nachvollziehen kann.. die variablen lauten in echt so:
cado_inst
cfox_inst
coop_inst
..
.

da es ca. 40 sind kann ich die ja aufgrund der beschränkten bucchstabenanzahl nicht auf a,b,c,d,e.. ändern.

Danke vorab!
rubberman
Lösung rubberman 03.05.2014 aktualisiert um 14:31:54 Uhr
Goto Top
Hallo zensbert.

In diesem Fall solltest du die Logik deiner Variablennamen umkehren. Also statt cado_inst, inst_cado verwenden. Dann kannst du mit einer FOR /F Schleife über die Kommandozeile
set inst_
laufen und die Ausgabe verarbeiten.
@echo off &setlocal
set /a "inst_cado=1, inst_cfox=1, inst_coop=0"  
set "variable="  

setlocal EnableDelayedExpansion
for /f "tokens=1* delims==" %%i in ('set inst_') do (  
  if %%j==1 for /f "tokens=1* delims=_" %%k in ("%%i") do set "variable=!variable!%%l "  
)
endlocal &set "variable=%variable:~,-1%"  

echo %variable%
pause
Grüße
rubberman
zensbert
zensbert 03.05.2014 um 14:31:48 Uhr
Goto Top
danke, du hast mir sehr geholfen!

Grüße!
pieh-ejdsch
pieh-ejdsch 03.05.2014 aktualisiert um 15:31:28 Uhr
Goto Top
moin rubberman,

wenn nur nach den 1er werten gesucht werden soll kann die Set-ausgabe abgesucht werden ohne Umstellen der Variablen.
for /f "delims=_" %%i in ('set ^|findstr /ie "_inst=1" ') do set "variable=!Variable!%%i "  

Gruß Phil
rubberman
rubberman 03.05.2014 aktualisiert um 15:39:34 Uhr
Goto Top
Hallo Phil.

Yepp, wie immer: Viele Wege führen nach Rom face-wink

Grüße
rubberman