Учебники

Пакетный скрипт — Массивы

Массивы не определены как тип в пакетном скрипте, но могут быть реализованы. Следующие вещи необходимо отметить, когда массивы реализованы в 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%].

Выход

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