betacode

Массивы (Array) в языке Batch

  1. Массив в языке Batch
  2. Проверить существование элемента
  3. Повторить через элементы массива
  4. Элементы имеет структуру

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