数组类型并没有明确定义为批处理脚本中的类型,但可以实现。 在批处理脚本中实现数组时需要注意以下几点。
- 数组中的每个元素都需要用
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
参数用于迭代数组。
以上命令产生以下输出 -
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%]
表示法访问结构的每个元素。
以上命令产生以下输出 -
Name=Joe
Value=1
Name=Mark
Value=2
Name=Mohan
Value=3