2016-12-20 3 views
1

J'essaye de mettre 2 variables dans 3 catégories, 6 variables au total, copier les catégories trois fois me semble être une mauvaise option surtout parce que mon vrai code est beaucoup plus grand avec presque 10 catégories avec 30 variables chacune.partage de variable? Batch CMD

Je demande d'abord quelle catégorie définir variable (constante) et ensuite demandé de définir les deux variables dans cette catégorie.

Ce qui est bien, jusqu'à ce que je veux faire quelque chose avec la variable combinée.

@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

Quelle valeur est censée être dans cette variable? Vous définissez les valeurs de '% const% _var1/2' mais jamais de quoi que ce soit avec' _varA' à la fin. – geisterfurz007

+0

désolé d'aller à A/B était un changement de dernière minute pour le rendre plus facile à comprendre et j'ai manqué de changer quelques lignes: S. – ryan

+0

Tout bon, repéré et réparé à nouveau – ryan

Répondre

1

J'ai joué un peu et le problème que vous avez est le fait que dans le lot-fichiers de la façon d'échapper à un % est un autre. Donc, votre code ressemblera finalement à echo %const%_varA% et comme %var_A% est vide/n'existe pas, la seule chose que vous devriez obtenir est %const en sortie.

Heureusement, il existe un moyen d'amener un autre personnage dans le jeu pour éviter que cela se produise. L'ajout de setlocal EnableDelayedExpansion sous la première ligne rendra les variables accessibles en utilisant des points d'exclamation. Ceci est habituellement utilisé pour accéder à des variables dans les ensembles fermés de parenthèses, mais est très pratique pour celui-ci:

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

est un petit exemple qui illustre le problème.
La ligne supérieure est ce que vous avez actuellement et ne fonctionne pas. Le plus bas utilise cependant l'expansion différée expliquée ci-dessus.
Signification: Première (%) la valeur de %const% est calculée, en changeant la ligne à echo [...] !three_varA! et après (!) vient le tout! N'hésitez pas à poser des questions :)

+0

merci @ geisterfurz007 J'ai joué avec – ryan

+0

oups .. je voulais écrire ... j'ai joué avec setlocal EnableDelayedExpansion et ! de ce que j'ai lu ailleurs mais doit avoir eu la mauvaise combinaison. votre explication fait envoyer maintenant. apprécie l'aide. Merci! – ryan