Ищете самый простой способ распечатать/отобразить содержимое массива в пакетном программировании

@echo off
set myArray[0]=a1
set myArray[1]=b2
set myArray[2]=c3
set myArray[3]=d4
set myArray[4]=e5
set myArray[5]=f6
set myArray[6]=g7
set myArray[7]=h8
set myArray[8]=i8
set myArray[9]=j9

set /a count=1
for /F "tokens=2 delims==" %%s in ('set myArray[') Do (
    echo %count% %%s
    set /a count=%count%+1
)
pause

Если у меня есть набор массивов, используемых в пакетном файле, как показано выше, могу ли я узнать, какой самый простой способ распечатать их, чтобы получить вывод, как показано ниже? Какой цикл for следует использовать?

1 a1
1 b2
1 c3
1 d4
1 e5
1 f6
1 g7
1 h8
1 i8
1 j9

person Pi-Turn    schedule 11.06.2014    source источник
comment
возможный дубликат Как перебрать массив в пакетном режиме?   -  person Giacomo1968    schedule 11.06.2014
comment
@JakeGould, спасибо!   -  person Pi-Turn    schedule 11.06.2014


Ответы (2)


для расширенного вопроса:

использовать отложенное расширение. Включите его с помощью setlocal enabledelayedexpansion в начале скрипта. Всякий раз, когда вы меняете переменную в блоке (все между ( и )) и используете ее внутри того же блока, вы должны использовать !вместо %.

@echo off
setlocal enabledelayedexpansion
...
set myArray[9]=j9

set /a count=1
for /F "tokens=2 delims==" %%s in ('set myArray[') Do (
    echo !count! %%s
    set /a count+=1
)
person Stephan    schedule 11.06.2014
comment
еще одно наблюдение от меня: когда я использую приведенный выше цикл for для вывода содержимого массива, на самом деле он не будет следовать порядку возрастания индекса, когда у вас используется более 10 индексов... Например, если у вас есть 13 индексов, то он будет следовать этому порядку: 0,10,11,12,1,2,3... вместо 0,1,2,3,4,5... это потому, что он обрабатывает индекс как строку? - person Pi-Turn; 11.06.2014
comment
@Pi-Turn: из этого ответа: обратите внимание, что переменные отсортированы в алфавитном порядке, поэтому, если существует более 9 переменных и вы хотите сохранить их естественный порядок, переменные меньше 10 должны иметь левый нуль: var01=Hello. См.: stackoverflow.com/questions/10166386/ - person Aacini; 11.06.2014
comment
@Aacini, что, если я не хочу оставлять ноль? Есть ли еще другое обходное решение? - person Pi-Turn; 11.06.2014
comment
@Pi-Turn: тогда вы должны сохранить переменную с номером последнего элемента: for /L %%i in (0,1,%lastElem%) do echo !myArray[%%i]! - person Aacini; 11.06.2014

for /l %%i in (0,1,9) do echo(%myarray[%%i]%

должен добиться цели - «хотя вы исключили i8 из своего списка.

Вопрос в том, действительно это то, что вы хотите сделать, учитывая, что ваш порядок присваивания находится в алфавитном порядке?

person Magoo    schedule 11.06.2014
comment
извините за опечатку... я уже исправил.. Я думаю, что ваш код не работает в моем случае, но я попробовал for /F "tokens=2 delims==" %%s in ('set myArray[') do echo %%s, и он работает для меня... - person Pi-Turn; 11.06.2014
comment
Еще один вопрос: если я не хочу использовать цикл for, а просто хочу распечатать содержимое определенного индекса, могу ли я узнать, как мне кодировать?... глупые вещи, которые я пробовал, это 'echo %myArray%[5 ]' и, очевидно, это не сработало... - person Pi-Turn; 11.06.2014
comment
@Pi-поворот: echo %myArray[5]%. [5] является частью имени переменной. - person Stephan; 11.06.2014
comment
@Стефан, спасибо. Теперь я дополнительно расширяю свой код, как показано в измененном вопросе выше... Массив может быть успешно распечатан, но просто счет никогда не увеличивается, пока массив распечатывается построчно... Я дважды проверяю несколько раз, и я не заметьте все, что я кодирую неправильно... - person Pi-Turn; 11.06.2014
comment
@Stephan, извините, что я снова столкнулся с ошибкой ... Что, если оба моих массива также являются переменной, то как ее закодировать? Я пробовал так echo %myArray[!index!]%, но это не работает... Хм... изначально мой индекс уже является переменной расширения... - person Pi-Turn; 11.06.2014
comment
@Pi-Turn: используйте этот способ: echo !myArray[%index%]! - person Stephan; 11.06.2014