2017-01-06 3 views
1

Как я могу написать, чтобы использовать сразу две вложенные переменные, например массив? Я пытаюсь сделать ряд переменных, указанных пользователем (индексы массива от 1 до этого номера), и их имена также задаются пользователем (имя массива), но когда я делаю это, ничего не возвращается. Кто-нибудь может мне помочь?Как использовать вложенную переменную в команде echo

echo how many people? 
set /p number= 
echo. 
echo. 
for /l %%a in (1,1,%number%) do (
    echo name of %%a person 
    set /p s%%a = 
    echo. 
    echo. 
    echo. 
    if %%a==%number% (
     echo names are 
     pause 
     for /l %%n in (1,1,%number%) do (
      echo name %%n is %s%%a% 
     ) 
    ) 
) 
+0

Кроме отсутствующего замедленного расширения, вы должны удалить _space_ перед '=' 'знак в набор/пс %% а =' для того, чтобы не стать частью имени переменной ... – aschipfl

+1

Престола [ этот ответ] (http://stackoverflow.com/questions/10166386/arrays-linked-lists-and-other-data-structures-in-cmd-exe-batch-script/10167990#10167990) – Aacini

ответ

1

Так что вы пытаетесь сделать, это создать массив псевдо, как командные файлы не имеют массивов изначально. Поэтому вам нужно использовать задержанное расширение для получения ожидаемого результата.

@echo off 
SetLocal EnableDelayedExpansion 
echo how many people? 
set /p number= 
echo. 
echo. 
for /l %%a in (1,1,%number%) do (
    echo name of %%a person 
    set /p s%%a= 
    echo. 
    echo. 
    echo. 
    if %%a==%number% (
     echo names are 
     for /l %%n in (1,1,%number%) do (
      echo name %%n is !s%%n! 
     ) 
    ) 
) 
pause 
0

Вы отсутствуют DelayedExpansion:

В партии замкнутый блок parentheseis получает вычисляется сразу, поэтому значения переменных изменены в нем не будет отображаться с помощью обычного %myVar% при обращении в ней.

Чтобы это сделать, добавьте setlocal EnableDelayedExpansion в начало вашего сценария и измените %myVar% на !myVar!.

Btw с помощью команды @echo off вы можете подавить много ненужного вывод командной строки :)

+0

спасибо за помощь, но не могли бы вы объяснить% myVar%! myVar! я не понял, что мне следует заменить –

+0

Если у вас есть, например, '% number%', замените его на '! number!', поэтому измените '%' на '!'. – geisterfurz007

+0

я ничего не сделал –

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