数组类型并没有明确定义为批处理脚本中的类型,但可以实现。 在批处理脚本中实现数组时需要注意以下几点。
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
可以使用下标语法从数组中检索值,并在数组的名称后面立即传递要检索的值的索引。
示例
@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