2016-12-20 3 views
1

Я пытаюсь установить 2 переменных в 3 категории, всего 6 переменных, копирование категорий три раза кажется неудачным вариантом, особенно потому, что мой реальный код намного больше, чем это, с почти 10 категориями с 30 переменными каждый.обмен переменных? Batch CMD

Сначала я прошу, какую категорию установить переменную (константу), а затем попросить установить две переменные в этой категории.

Это нормально, пока я не хочу что-то делать с комбинированной переменной.

@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

Какое значение должно быть в этой переменной? Вы устанавливаете значения '% const% _var1/2', но никогда ничего с' _varA' в конце. – geisterfurz007

+0

Извините, что A/B был последним изменением, чтобы было легче понять, и я пропустил несколько строк: S. – ryan

+0

Все хорошее, пятнистое и исправленное снова – ryan

ответ

1

Я играл вокруг немного, и проблема у вас есть тот факт, что в пакетном-файлы так, чтобы избежать % является еще один. Таким образом, ваш код в конечном итоге будет выглядеть как echo %const%_varA% и как %var_A% пуст/не существует, единственное, что вы должны получить, это %const в качестве вывода.

К счастью, есть способ привести другого персонажа в игру, чтобы этого не произошло. Добавление setlocal EnableDelayedExpansion в первой строке сделает доступными переменные с помощью восклицательных знаков. Это, как правило, используется для доступа к переменным в замкнутых множествах скобки, но пригодятся для этого:

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

крошечного пример, демонстрирующий эту проблема.
Верхняя линия - это то, что вы сейчас имеете и не работаете. Нижняя, однако, использует выше объясненное замедленное расширение.
Значение: Во-первых (%) значение %const% рассчитывается, изменяя линию echo [...] !three_varA! и после (!) приходит все это!

Не стесняйтесь задавать вопросы :)

+0

спасибо @ geisterfurz007 Я играл с – ryan

+0

oops .. я хотел написать ... я играл с setlocal EnableDelayedExpansion и ! от того, что я читал в другом месте, но, должно быть, неправильно. ваше объяснение делает отправку сейчас. оцените помощь. благодаря! – ryan

Смежные вопросы