Массивы (Array) в языке Batch
1. Массив в языке Batch
Массив это ряд последовательных элементов, которые индексированы (index) 0, 1, 2, ....

Для других языков массив имеет фиксированный размер. Но в языке Batch, массив имеет динамический размер, и не имеет атрибут описывающий длину массива (количество элементов массива). И не имеет прямой функции (function), которая поможет вам получить количество элементов массива.
Все элементы массивы должны иметь прикрепленное значение через команду set, не то этот элемент не существует.
@echo off
set myarray[0] = Abc
set /A myarray[1] = 234
set myarray[2]=Def
set myarray[0]=A new value
Пример:
arrayExample1.bat
@echo off
set names[0]=Tom
set names[1]=Jerry
set names[2]=Donald
set names[3]=Aladin
echo names[0]= %names[0]%
echo names[3]= %names[3]%
@rem names[10] does not exists!
echo names[10]= %names[10]%
pause

Вы можете прикрепить новые значения для элементов массива, пример ниже:
arrayExample2.bat
@echo off
set names[0]=Tom
set names[1]=Jerry
echo names[0]= %names[0]%
@rem: Assign new value
set names[0]=Donald
echo After assign new value to names[0]:
echo names[0]= %names[0]%
pause

2. Проверить существование элемента
Использовать команду defined, чтобы проверить существует ли элемент в массиве?
arrayDefinedExample.bat
@echo off
set Arr[0]=1000
set Arr[1]=5000
set Arr[2]=3000
if not defined Arr[5] (
echo Element at 5 does not exists!
)
if defined Arr[1] (
echo Element at 1 exists!
)
pause

3. Повторить через элементы массива
Смотрите так же:
Цикл For /F может быть подтвержден на ряде цифр (Range of numbers), поэтому он может подтверждать на ряде индексов массива (range of indexes)
fetchArrayExample1.bat
@echo off
set fruits[0]=Apple
set fruits[1]=Apricot
set fruits[2]=Asparagus
set fruits[3]=Aubergine
set fruits[4]=Banana
FOR /L %%i IN (0 1 4) DO (
call echo Element At %%i = %%fruits[%%i]%%
)
pause

Если вы не знаете заранее количество элементов в массиве, вы можете повоторить на его элементах используя команду goto.
fetchArrayExample2.bat
@echo off
set fruits[0]=Apple
set fruits[1]=Apricot
set fruits[2]=Asparagus
set fruits[3]=Aubergine
set fruits[4]=Banana
set /A i = 0
:my_loop
if defined fruits[%i%] (
call echo Element At %i% = %%fruits[%i%]%%
set /a i = %i% + 1
goto :my_loop
)
echo Done!
pause

4. Элементы имеет структуру
В языке Batch, элемент массива может иметь структуру (Structure). Структура это объект с разными атрибутами, например объект представляет человека с 2 атрибутами как firstName, lastName (Имя, Фамилия).
structureArrayExample.bat
@echo off
set persons[0].firstName=Bill
set persons[0].lastName=Gates
set persons[1].firstName=Steve
set persons[1].lastName=Jobs
set persons[2].firstName=Mark
set persons[2].lastName=Zuckerberg
set persons[3].firstName=Sundar
set persons[3].lastName=Pichai
FOR /L %%i IN (0 1 3) DO (
call echo Person At %%i = %%persons[%%i].firstName%% %%persons[%%i].lastName%%
)
pause
