批处理脚本 – 数组
数组是相同数据类型的元素的集合。数组未明确定义为批处理脚本类型,但可以使用。在 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
如何访问数组及其元素?
访问数组最简单的方法是使用它的索引。在上面的示例中,第一个元素可以作为 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
如何修改数组的元素?
我们可以通过使用其索引来添加新元素或修改现有元素的值。下面程序的输出是“最后一个元素是 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
Set a[2]=14
echo The new value of the third element of the array is %a[2]%
上述代码段的输出导致以下行为
The new value of the third element of the array is 14
遍历数组
使用 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
数组的长度
没有预定义的函数来查找数组的长度。我们可以使用 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
在数组中创建结构
我们还可以在数组中创建结构。在下面的示例中,使用默认命令(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
测试元素的存在
我们使用 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.