📜  批处理脚本 - 在数组中创建结构(1)

📅  最后修改于: 2023-12-03 14:54:32.916000             🧑  作者: Mango

批处理脚本 - 在数组中创建结构

在批处理中,我们经常需要使用数组来存储数据。如果数组中的元素是结构体,那么就可以更好地组织数据,方便数据的处理和管理。本文将介绍如何在批处理中创建结构体数组。

创建结构体

首先我们需要定义结构体的类型和每个成员的名字和类型。下面是一个示例:

set "struct=type Point"
set "struct=%struct% ("
set "struct=%struct% x:long"
set "struct=%struct% y:long"
set "struct=%struct% )"

该结构体类型名为 Point,它有两个成员 xy,类型都是 long

要使用该结构体,需要先用 setlocal EnableExtensions EnableDelayedExpansion 开启延迟变量扩展并启用扩展命令,然后用 set 命令创建一个以结构体类型名为元素类型的数组,并赋初值:

setlocal EnableExtensions EnableDelayedExpansion
set "point[0]=!struct:)= x=1 y=2!"
set "point[1]=!struct:)= x=3 y=4!"

可以用 echo 命令来输出数组的值:

echo !point[0]!
echo !point[1]!

输出结果为:

Point x=1 y=2
Point x=3 y=4

这表明数组中的元素确实是由结构体组成的。

访问结构体的成员

要访问结构体的成员,可以使用批处理中的变量替换技巧。例如,要输出数组中第一个元素的 x 值,可以使用以下命令:

for %%i in (0) do (
    for /f "tokens=2 delims== " %%j in ("!point[%%i]!") do (
        echo x=%%j
    )
)

该命令中,第一个 for 循环用来遍历数组,因为变量替换必须在一个实际存在的变量上进行;第二个 for 循环用来解析结构体成员的值,其实就是提取等号右边的部分。输出结果为:

x=1

类似地,要输出数组中第二个元素的 y 值,可以使用以下命令:

for %%i in (1) do (
    for /f "tokens=3 delims== " %%j in ("!point[%%i]!") do (
        echo y=%%j
    )
)

该命令中,只需要将 tokens 参数设置成 3 就可以提取出 y 值。

总结

本文介绍了如何在批处理中创建结构体数组,并访问数组中结构体的成员。批处理脚本虽然功能有限,但通过巧妙地利用变量替换和命令解析等技巧,也能实现一些比较复杂的任务。