📜  批处理脚本 – 数组

📅  最后修改于: 2022-05-13 01:56:17.255000             🧑  作者: Mango

批处理脚本 – 数组

数组是相同数据类型的元素的集合。数组未明确定义为批处理脚本类型,但可以使用。在 Batch Script 中使用相同的成员时,需要注意以下事项。

  • 相同成员的每个方面都需要通过一组顺序来定义。
  • 将需要一个“for”循环来使程序值加倍。

如何创建数组?

我们可以使用命令“set”创建一个数组。例如,设置 a[0] = 1 意味着我们创建了一个数组,其索引 0 的第一个元素的值为 1。此外,定义数组的另一种方法是创建一个列表,然后循环遍历它。让我们看下面的例子。

@echo off
set list_1=7 9 1 3
(for %%p in (%list_1%) do (
  echo %%p
)) 

上面的命令产生以下输出

7 9 1 3

图 1.1 创建数组并添加元素

如何访问数组及其元素?

访问数组最简单的方法是使用它的索引。在上面的示例中,第一个元素可以作为 a[0] 访问,第二个元素可以通过 a[1] 访问,依此类推。索引从 0 开始,以 length(array)-1 结束。让我们看看下面的例子,我们在数组中有 2 个元素,我们通过它的索引访问这些值。

@echo off 
set a[0]=5 
set a[1]=12 
echo The first element of the array created is %a[0]% 
echo The second element of the array created is %a[1]% 

上面的代码将产生以下输出。

The first element of the array created is 5 
The second element of the array created is 12  

图 1.2 访问数组内的元素

如何修改数组的元素?

我们可以通过使用其索引来添加新元素或修改现有元素的值。下面程序的输出是“最后一个元素是 12”

@echo off 
set a[0]=5 
set a[1]=7   
set a[2]=9 
Rem Adding a new element at the array end 
Set a[3]=12 
echo The last element is %a[3]% 

现在让我们看看修改现有值。在下面的代码片段中,我们将 a[2] 分配为 14,数组的第三个元素现在是 14

上述代码段的输出导致以下行为

图 1.3 修改数组中的元素

遍历数组

使用 for 循环实现对数组的迭代。使用 for 循环,我们可以一个一个地访问元素。让我们看看下面的例子。 /l 在这里使用,因为我们在指定范围内移动并遍历数组。

@echo off 
set a[0]=5 
set a[1]=7   
set a[2]=9 
Rem Adding a new element at the array end 
Set a[3]=12 
echo The last element is %a[3]% 

上面的片段产生下面的输出

Download
 Upload 
 Browse 
 Add 
 Save 
 Delete 

图 1.4 遍历数组

数组的长度

没有预定义的函数来查找数组的长度。我们可以使用 for 循环和遍历数组。

@echo off 
:: Here an array is defined
set array[0]=1 
set array[1]=4 
set array[2]=9 
set array[3]=10 


:: Here we initializing an variable named 
:: len to calculate length of array
set len=0 

:: To iterate the element of array
:Loop 

:: It will check if the element is defined or not
if defined array[%len%] ( 
set /a len+=1
GOTO :Loop 
)
echo The length of the array is %len%
pause

上面的程序产生以下输出。

The length of the array is 4

图 1.5 anArray 的长度

在数组中创建结构

我们还可以在数组中创建结构。在下面的示例中,使用默认命令(set)定义的每个变量都有 2 个值与每个相同的成员相关联。变量 i 设置为 0,以便我们可以在结构中移动,循环将运行 3 次。我们不断检查 i 值是否等于 len 值的状态,如果不等于,我们输入代码。我们可以使用 obj [%i%] 表示法访问结构的每个组件。

@echo off 
set obj[0].Name=Akash 
set obj[0].ID=101 
set obj[1].Name=Ajay 
set obj[1].ID=102 
set obj[2].Name=Thomas 
set obj[2].ID=103 
  
FOR /L %%i IN (0 1 2) DO  (   
  call echo User Name = %%obj[%%i].Name%%   
  call echo User ID = %%obj[%%i].ID%% 
) 

上面的代码产生下面的输出

User Name = Akash 
User ID = 101 
User Name = Ajay 
User ID = 102 
User Name = 
Thomas User ID = 103

图 1.6 在数组中创建结构

测试元素的存在

我们使用 if defined 功能来检查元素是否在数组中。 %1 是调用命令行的第一个参数。 %~1 表示参数周围的引号被删除。

@ECHO OFF &SETLOCAL 
set "Array[Akash]=true"
set "Array[John]=true"
set "Array[Venky]=true"
set "Array[Praveen]=true"

set "MyUserName=Akash"
call:check "%MyUserName%"
set "MyUserName=Paul"
call:check "%MyUserName%"
goto:eof

:check
if defined Array[%~1] (
    echo %~1 is in the array.
) else (
    echo %~1 is NOT in the array.
)
exit /b

上面的代码给出了下面的输出

Akash is in the array. 
Paul is NOT in the array.

图 1.7 数组中的测试元素