2016-12-20 4 views
1

Ich versuche, 2 Variablen in 3 Kategorien zu setzen, insgesamt 6 Variablen, das Kopieren der Kategorien dreimal scheint eine schlechte Option vor allem, weil mein realer Code viel größer ist als dies mit fast 10 Kategorien mit jeweils 30 Variablen.variable Freigabe? Batch CMD

Zuerst frage ich, welche Kategorie Variable (Konstante) setzen und dann gefragt, um die zwei Variablen in dieser Kategorie zu setzen.

Was ist in Ordnung, bis ich etwas mit der kombinierten Variable machen möchte.

@echo off 
cls 

:start 

cls 
echo which variable do you want to set? 
echo (1),(2),(3) 
choice /c 123 /n 
if ERRORLEVEL 3 goto :3 
if ERRORLEVEL 2 goto :2 
if ERRORLEVEL 1 goto :1 

:1 
set const=one 
goto :wizard 

:2 
set const=two 
goto :wizard 

:3 
set const=three 
goto :wizard 

:wizard 
set /p %const%_varA= set %const% variableA: 
set /p %const%_varB= set %const% variableB: 

:: this line is the problem 
echo %%const%_varA% 
echo %%const%_varB% 
:: 
echo. 
pause 
goto :filewrite 

echo. 

:filewrite 
echo one varA %one_varA% 
echo one varB %one_varB% 
echo two varA %two_varA% 
echo two varB %two_varB% 
echo three varA %three_varA% 
echo three varB %three_varB% 

pause 
goto :start 
+0

Welchen Wert soll in dieser Variable sein? Sie setzen die Werte von '% const% _var1/2', aber niemals von irgendetwas mit' _varA' am Ende. – geisterfurz007

+0

Entschuldigung bei A/B war eine Last-Minute-Änderung, um es zu verstehen, und ich verpasste es, ein paar Zeilen zu ändern: S. – ryan

+0

Alles gut, gepunktet und wieder repariert – ryan

Antwort

1

Ich habe um ein bisschen gespielt und das Problem, das Sie haben, ist die Tatsache, dass in Batch-Dateien, wie ein % ist eine andere zu entkommen. So wird Ihr Code schließlich wie echo %const%_varA% aussehen und als %var_A% ist leer/existiert nicht, das einzige, was Sie bekommen sollten, ist %const als Ausgabe.

Glücklicherweise gibt es eine Möglichkeit, einen anderen Charakter ins Spiel zu bringen, um dies zu verhindern. Durch Hinzufügen von setlocal EnableDelayedExpansion unter der ersten Zeile werden Variablen mit Ausrufezeichen zugänglich gemacht. Dies wird in der Regel für den Zugriff auf Variablen in geschlossenen Gruppen von Klammern verwendet, sondern ist praktisch für diesen:

@echo off 
setlocal EnableDelayedExpansion 
set const=three 
set %const%_varA=foo 
echo Without exclamationmarks: %%const%_varA% 
echo With exclamationmarks : !%const%_varA! 
pause 

ist ein kleines Beispiel, das das Problem veranschaulicht.
Die obere Zeile ist, was Sie gerade haben und nicht funktioniert. Der untere verwendet jedoch die oben erläuterte verzögerte Expansion.
Bedeutung: First (%) der Wert der %const% berechnet wird, kommt die Linie zu echo [...] !three_varA! und nach Wechsel (!) die ganze Sache!

Fühlen Sie sich frei, Fragen zu stellen :)

+0

danke @ Geisterfurz007 ich habe mit – ryan

+0

gespielt oops .. ich meinte zu schreiben ... ich habe mit setlocal EnableDelayedExpansion herumgespielt ! von dem, was ich woanders gelesen habe, aber muss die falsche Kombination gehabt haben. Deine Erklärung macht jetzt senden. schätze die Hilfe. Vielen Dank! – ryan