Массивы не определены как тип в пакетном скрипте, но могут быть реализованы. Следующие вещи необходимо отметить, когда массивы реализованы в 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 для перемещения по диапазонам используется для перебора массива.
Каждый элемент массива должен быть специально определен с помощью команды 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%].
Каждая переменная, определенная с помощью команды set, имеет 2 значения, связанных с каждым индексом массива.
Переменная i установлена в 0, так что мы можем перебрать структуру, длина массива которой равна 3.
Мы всегда проверяем условие того, равно ли значение i значению len, и если нет, мы перебираем код.
Мы можем получить доступ к каждому элементу структуры, используя обозначение obj [% i%].
Выход
Приведенная выше команда производит следующий вывод.