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