批处理脚本 - 数组



批处理脚本中没有专门定义数组类型,但可以实现。在批处理脚本中实现数组时,需要注意以下几点。

  • 数组的每个元素都需要使用 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 命令专门定义。

  • 使用带 /L 参数的 'for' 循环遍历范围来遍历数组。

输出

以上命令产生以下输出。

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%

输出

输出以上命令产生以下输出。

1
2
3
4
"The length of the array is" 4

在数组中创建结构

结构也可以在批处理文件中实现,只需进行一些额外的编码即可实现。以下示例演示了如何实现。

示例

@echo off 
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 
FOR /L %%i IN (0 1 2) DO  (
   call echo Name = %%obj[%%i].Name%%
   call echo Value = %%obj[%%i].ID%%
)

关于以上代码,需要注意以下关键事项。

  • 使用 set 命令定义的每个变量都与数组的每个索引关联了 2 个值。

  • 变量 i 设置为 0,以便我们可以循环遍历结构,其长度为 3。

  • 我们始终检查 i 的值是否等于 len 的值,如果不是,则循环遍历代码。

  • 我们可以使用 obj[%i%] 表示法访问结构的每个元素。

输出

以上命令产生以下输出。

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