Пакетный сценарий - Массивы
Массивы конкретно не определены как тип в 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