2015-02-04 3 views
0

Я пытаюсь создать выбор меню с помощью командного файла Windows.переменная партии из пользовательского ввода обрабатывается по-разному

Когда я использую цикл for, который создает переменную i, и используйте его для вызова переменной something [i] с !something[%%i]!, он отлично работает.

Однако, когда я пытаюсь создать переменную j из пользовательского ввода и использовать ее для вызова переменной something [j] с помощью !something[%%j]!, она не работает.

Я не знаю, почему он обращается с переменной J по-разному к переменной I, но, кажется, J может быть вызвана только с помощью !j!, а не %%j

@echo off 
setlocal EnableDelayedExpansion 

set something[0]=aaaa 
set something[1]=bbbb 
set something[2]=cccc 
set something[3]=dddd 
set something[4]=eeee 
set something[5]=ffff 
set something[6]=gggg 

for /l %%i in (0,1,6) do echo %%i. !something[%%i]! 

set /p j="Input selection: " 
echo. 
echo j=%%j 
echo j=!j! 
echo. 
set Selection=!something[%%j]! 

echo Selection = !Selection! 
pause 

Вот пример вывода:

0. aaaa 
1. bbbb 
2. cccc 
3. dddd 
4. eeee 
5. ffff 
6. gggg 
Input selection: 3 

j=%j 
j=3 

Selection = 
Press any key to continue . . . 

ответ

2

Временные переменные %% действительны только в операторе FOR. Вы пытаетесь использовать %% j вне цикла FOR. Вот два способа получить желаемый результат.

@echo off 
 
setlocal EnableDelayedExpansion 
 

 
set something[0]=aaaa 
 
set something[1]=bbbb 
 
set something[2]=cccc 
 
set something[3]=dddd 
 
set something[4]=eeee 
 
set something[5]=ffff 
 
set something[6]=gggg 
 

 
for /l %%i in (0,1,6) do echo %%i. !something[%%i]! 
 

 
set /p j="Input selection: " 
 
echo. 
 
echo j=%j% 
 
echo. 
 
set Selection=!something[%j%]! 
 

 
echo Selection = %Selection% 
 
pause 
 
​

или

@echo off 
 

 
set something[0]=aaaa 
 
set something[1]=bbbb 
 
set something[2]=cccc 
 
set something[3]=dddd 
 
set something[4]=eeee 
 
set something[5]=ffff 
 
set something[6]=gggg 
 

 
for /l %%i in (0,1,6) do call echo %%i. %%something[%%i]%% 
 

 
set /p j="Input selection: " 
 
echo. 
 
echo j=%j% 
 
echo. 
 
call set Selection=%%something[%j%]%% 
 

 
echo Selection = %Selection% 
 
pause​

+0

Спасибо, я подумал, что мне нужно использовать двойную «%» при вызове любой переменной из командного файла с использованием знаков процента (первый знак процента, чтобы избежать второго), и попытался использовать! Something [%% j %% ]! также. – Knowbody

1

Вы путаете с для параметра%%jс переменной%j%. Следующий пример может сделать это различие понятнее:

for %%j in (%j%) do set Selection=!something[%%j]! 

Однако, в этом случае вы можете напрямую использовать:

set Selection=!something[%j%]! 

Вы также можете использовать эту форму:

call set Selection=%%something[%j%]%% 

, что дон» t требует отсроченного расширения, но медленнее.

Однако, если команда set будет помещена в круглые скобки (то есть в команде с несколькими линиями IF или FOR), тогда могут использоваться только определенные формы. Детали Furter по всем этим вариантам объясняются на this post.

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