Script por lotes: matrices

Las matrices no se definen específicamente como un tipo en Batch Script, pero se pueden implementar. Las siguientes cosas deben tenerse en cuenta cuando se implementan matrices en Batch Script.

  • Cada elemento de la matriz debe definirse con el comando set.
  • El ciclo 'for' sería necesario para iterar a través de los valores de la matriz.

Crear una matriz

Una matriz se crea usando el siguiente comando set.

set a[0]=1

Donde 0 es el índice de la matriz y 1 es el valor asignado al primer elemento de la matriz.

Otra forma de implementar matrices es definir una lista de valores e iterar a través de la lista de valores. El siguiente ejemplo muestra cómo se puede implementar.

Ejemplo

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

Salida

El comando anterior produce la siguiente salida.

1
2
3
4

Acceso a matrices

Puede recuperar un valor de la matriz utilizando la sintaxis de subíndice, pasando el índice del valor que desea recuperar entre corchetes inmediatamente después del nombre de la matriz.

Ejemplo

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

En este ejemplo, el índice comienza desde 0, lo que significa que se puede acceder al primer elemento usando el índice como 0, se puede acceder al segundo elemento usando el índice como 1 y así sucesivamente. Veamos el siguiente ejemplo para crear, inicializar y acceder a matrices:

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

El comando anterior produce la siguiente salida.

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

Modificar una matriz

Para agregar un elemento al final de la matriz, puede usar el elemento set junto con el último índice del elemento de la matriz.

Ejemplo

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

El comando anterior produce la siguiente salida.

The last element of the array is 4

Puede modificar un elemento existente de una matriz asignando un nuevo valor a un índice determinado como se muestra en el siguiente ejemplo:

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

El comando anterior produce la siguiente salida.

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

Iterando sobre una matriz

La iteración sobre una matriz se logra utilizando el ciclo 'for' y pasando por cada elemento de la matriz. El siguiente ejemplo muestra una forma sencilla de implementar una matriz.

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

Se deben tener en cuenta las siguientes cosas sobre el programa anterior:

  • Cada elemento de la matriz debe definirse específicamente mediante el comando set.

  • El ciclo 'for' con el parámetro / L para moverse a través de rangos se usa para iterar a través de la matriz.

Salida

El comando anterior produce la siguiente salida.

Comments 
variables 
Arrays 
Decision making 
Time and date 
Operators

Longitud de una matriz

La longitud de una matriz se realiza iterando sobre la lista de valores en la matriz, ya que no hay una función directa para determinar el número de elementos en una 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%

Salida

Salida El comando anterior produce la siguiente salida.

The length of the array is 4

Crear estructuras en matrices

Las estructuras también se pueden implementar en archivos por lotes utilizando un poco de codificación adicional para la implementación. El siguiente ejemplo muestra cómo se puede lograr esto.

Ejemplo

@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

Se deben tener en cuenta las siguientes cosas clave sobre el código anterior.

  • Cada variable definida usando el comando set tiene 2 valores asociados con cada índice de la matriz.

  • La variable i se establece en 0 para que podamos recorrer la estructura con la longitud de la matriz, que es 3.

  • Siempre verificamos la condición de si el valor de i es igual al valor de len y si no, recorremos el código.

  • Podemos acceder a cada elemento de la estructura usando la notación obj [% i%].

Salida

El comando anterior produce la siguiente salida.

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