Пакетный сценарий - Массивы

Массивы конкретно не определены как тип в Batch Script, но могут быть реализованы. При реализации массивов в пакетном скрипте необходимо отметить следующее.

  • Каждый элемент массива необходимо определить с помощью команды set.
  • Для перебора значений массива потребуется цикл for.

Создание массива

Массив создается с помощью следующей команды set.

set a[0]=1

Где 0 - это индекс массива, а 1 - значение, присвоенное первому элементу массива.

Другой способ реализации массивов - определить список значений и перебрать список значений. В следующем примере показано, как это можно реализовать.

пример

@echo off 
set list = 1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

Выход

Приведенная выше команда производит следующий вывод.

1
2
3
4

Доступ к массивам

Вы можете получить значение из массива, используя синтаксис нижнего индекса, передав индекс значения, которое вы хотите получить, в квадратных скобках сразу после имени массива.

пример

@echo off 
set a[0]=1 
echo %a[0]%

В этом примере индекс начинается с 0, что означает, что к первому элементу можно получить доступ, используя индекс как 0, ко второму элементу можно получить доступ, используя индекс как 1 и так далее. Давайте проверим следующий пример для создания, инициализации и доступа к массивам -

@echo off
set a[0] = 1 
set a[1] = 2 
set a[2] = 3 
echo The first element of the array is %a[0]% 
echo The second element of the array is %a[1]% 
echo The third element of the array is %a[2]%

Приведенная выше команда производит следующий вывод.

The first element of the array is 1 
The second element of the array is 2 
The third element of the array is 3

Изменение массива

Чтобы добавить элемент в конец массива, вы можете использовать элемент set вместе с последним индексом элемента массива.

пример

@echo off 
set a[0] = 1  
set a[1] = 2  
set a[2] = 3 
Rem Adding an element at the end of an array 
Set a[3] = 4 
echo The last element of the array is %a[3]%

Приведенная выше команда производит следующий вывод.

The last element of the array is 4

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

@echo off 
set a[0] = 1 
set a[1] = 2  
set a[2] = 3 
Rem Setting the new value for the second element of the array 
Set a[1] = 5 
echo The new value of the second element of the array is %a[1]%

Приведенная выше команда производит следующий вывод.

The new value of the second element of the array is 5

Итерация по массиву

Итерация по массиву достигается с помощью цикла for и прохождения каждого элемента массива. В следующем примере показан простой способ реализации массива.

@echo off 
setlocal enabledelayedexpansion 
set topic[0] = comments 
set topic[1] = variables 
set topic[2] = Arrays 
set topic[3] = Decision making 
set topic[4] = Time and date 
set topic[5] = Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

В отношении вышеуказанной программы необходимо отметить следующее:

  • Каждый элемент массива должен быть определен специально с помощью команды set.

  • Цикл for с параметром / L для перемещения по диапазонам используется для итерации по массиву.

Выход

Приведенная выше команда производит следующий вывод.

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Длина массива

Длина массива определяется путем перебора списка значений в массиве, поскольку нет прямой функции для определения количества элементов в массиве.

@echo off 
set Arr[0] = 1 
set Arr[1] = 2 
set Arr[2] = 3 
set Arr[3] = 4 
set "x = 0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

Выход

Выходные данные Приведенная выше команда дает следующий результат.

The length of the array is 4

Создание структур в массивах

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

пример

@echo off 
set len = 3 
set obj[0].Name = Joe 
set obj[0].ID = 1 
set obj[1].Name = Mark 
set obj[1].ID = 2 
set obj[2].Name = Mohan 
set obj[2].ID = 3 
set i = 0 
:loop 

if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=

for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name = %cur.Name% 
echo Value = %cur.ID% 
set /a i = %i%+1 
goto loop

В отношении приведенного выше кода необходимо отметить следующие ключевые моменты.

  • Каждая переменная, определенная с помощью команды set, имеет 2 значения, связанные с каждым индексом массива.

  • Переменная i установлен в 0, чтобы мы могли перебирать структуру, длина массива равна 3.

  • Мы всегда проверяем условие, равно ли значение i значению len а если нет, мы перебираем код.

  • Мы можем получить доступ к каждому элементу структуры, используя обозначение obj [% i%].

Выход

Приведенная выше команда производит следующий вывод.

Name = Joe 
Value = 1 
Name = Mark 
Value = 2 
Name = Mohan 
Value = 3