Script de lote - matrizes

Os arrays não são especificamente definidos como um tipo no Batch Script, mas podem ser implementados. Os itens a seguir precisam ser observados quando os arrays são implementados no Batch Script.

  • Cada elemento da matriz precisa ser definido com o comando set.
  • O loop 'for' seria necessário para iterar os valores da matriz.

Criando um Array

Uma matriz é criada usando o seguinte comando set.

set a[0]=1

Onde 0 é o índice da matriz e 1 é o valor atribuído ao primeiro elemento da matriz.

Outra maneira de implementar arrays é definir uma lista de valores e iterar por meio da lista de valores. O exemplo a seguir mostra como isso pode ser implementado.

Exemplo

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

Resultado

O comando acima produz a seguinte saída.

1
2
3
4

Acessando matrizes

Você pode recuperar um valor da matriz usando a sintaxe do subscrito, passando o índice do valor que deseja recuperar entre colchetes imediatamente após o nome da matriz.

Exemplo

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

Neste exemplo, o índice começa em 0, o que significa que o primeiro elemento pode ser acessado usando o índice como 0, o segundo elemento pode ser acessado usando o índice como 1 e assim por diante. Vamos verificar o seguinte exemplo para criar, inicializar e acessar matrizes -

@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]%

O comando acima produz a seguinte saída.

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

Modificando um Array

Para adicionar um elemento ao final do array, você pode usar o elemento set junto com o último índice do elemento do array.

Exemplo

@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]%

O comando acima produz a seguinte saída.

The last element of the array is 4

Você pode modificar um elemento existente de um Array atribuindo um novo valor em um determinado índice, conforme mostrado no exemplo a seguir -

@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]%

O comando acima produz a seguinte saída.

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

Iterando sobre uma matriz

A iteração em uma matriz é obtida usando o loop 'for' e percorrendo cada elemento da matriz. O exemplo a seguir mostra uma maneira simples de implementar um array.

@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]! 
)

As seguintes coisas precisam ser observadas sobre o programa acima -

  • Cada elemento da matriz precisa ser definido especificamente usando o comando set.

  • O loop 'for' com o parâmetro / L para mover pelos intervalos é usado para iterar através da matriz.

Resultado

O comando acima produz a seguinte saída.

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Comprimento de uma matriz

O comprimento de uma matriz é feito iterando sobre a lista de valores na matriz, pois não há função direta para determinar o número de elementos em uma matriz.

@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%

Resultado

Saída O comando acima produz a seguinte saída.

The length of the array is 4

Criação de estruturas em matrizes

As estruturas também podem ser implementadas em arquivos em lote usando um pouco de uma codificação extra para implementação. O exemplo a seguir mostra como isso pode ser alcançado.

Exemplo

@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

As seguintes coisas importantes precisam ser observadas sobre o código acima.

  • Cada variável definida usando o comando set possui 2 valores associados a cada índice da matriz.

  • A variável i é definido como 0 para que possamos percorrer a estrutura com o comprimento da matriz, que é 3.

  • Sempre verificamos se o valor de i é igual ao valor de len e se não, percorremos o código.

  • Podemos acessar cada elemento da estrutura usando a notação obj [% i%].

Resultado

O comando acima produz a seguinte saída.

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