Batch file 批处理文件-嵌套变量?

Batch file 批处理文件-嵌套变量?,batch-file,Batch File,我知道如何使用for/L、delayedexpansion和数组在批处理文件中创建嵌套变量,但请听我的方案 我动态创建了400个变量,如下所示: %1x1%%1x2%等。 %2x1%%2x2%等。 它上升到20x20 如果用户请求更改20 x 20,他们会键入“20 20”并对其进行解析。例如,我可以将20x20设置为0。我的问题是检查它。如果用户再次输入“20”,我希望能够将其更改回“.”(这是用户请求将其设置为0之前的情况) 这就是它看起来的样子: set !xVal!x!yVal!=0

我知道如何使用for/L、delayedexpansion和数组在批处理文件中创建嵌套变量,但请听我的方案

我动态创建了400个变量,如下所示:

%1x1%%1x2%等。 %2x1%%2x2%等。 它上升到20x20

如果用户请求更改20 x 20,他们会键入“20 20”并对其进行解析。例如,我可以将20x20设置为0。我的问题是检查它。如果用户再次输入“20”,我希望能够将其更改回“.”(这是用户请求将其设置为0之前的情况)

这就是它看起来的样子:

set !xVal!x!yVal!=0
我怎样才能做到这一点:

if %!xVal!x!yVal!%==0
不重写我的整个剧本?
请记住,我说过它是动态创建的,所以如果我需要设置一个数组,这不是一个问题,我甚至不确定它是否会工作。对于创建变量“网格”(1x1到20x20)的循环来说,这基本上是2。我认为您的问题有两个主要不同点:

1-永远不要定义任何以数字开头的变量,如
set 1x1=0
。为什么?因为当您尝试以这种方式扩展其值时:
echo%1x1%
第一个“%1”将作为批处理文件的第一个参数,因此您永远不会获得“1x1”变量的值。我建议您在变量名的开头插入一个字母;例如:
设置a1x1=0

2-使用错误的方法展开变量值。以下是一些例子:

创建20 x 20阵列:

for /L %%i in (1,1,20) do (
   for /L %%j in (1,1,20) do (
      set a%%ix%%j=0
   )
)
设置元素xVal和yVal的值:

set a!xVal!x!yVal!=0
echo !a%xVal%x%yVal%!
获取元素xVal和yVal的值:

set a!xVal!x!yVal!=0
echo !a%xVal%x%yVal%!
当代码块内的两个索引都更改时,获取元素xVal和yVal的值:

for %%x in (!xVal!) do for %%y in (!yVal!) do echo !a%%xx%%y!
相同,但仅使用一个用于:

for /F "tokens=1,2" %%x in ("!xVal! !yVal!") do echo !a%%xx%%y!
有关这些阵列管理的完整说明,请参阅