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