批处理文件 - 嵌套变量?

时间:2015-07-06 22:45:14

标签: batch-file

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

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

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

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

这就是它的样子:

set !xVal!x!yVal!=0

我怎样才能做到这一点:

if %!xVal!x!yVal!%==0

没有重写我的整个脚本? 请记住,我说它是动态创建的,所以如果我需要设置一个数组,这不是问题,我不确定它是否会起作用。这基本上是2个循环来创建变量的“网格”,即1x1到20x20。

1 个答案:

答案 0 :(得分:1)

我认为你的问题主要有两个不同点:

1-你永远不应该定义任何以数字开头的变量,例如set 1x1=0。为什么?因为当您尝试以这种方式扩展其值时:echo %1x1%第一个“%1”被视为批处理文件的第一个参数,因此您永远不会获取“1x1”的值“变量。我建议你在变量名的开头插入一个字母;例如:set 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

获取元素xVal和yVal的值:

echo !a%xVal%x%yVal%!

当两个索引在代码块内发生变化时,获取元素xVal和yVal的值:

for %%x in (!xVal!) do for %%y in (!yVal!) do echo !a%%xx%%y!

同样,但仅使用一个FOR:

for /F "tokens=1,2" %%x in ("!xVal! !yVal!") do echo !a%%xx%%y!

有关这些阵列管理的完整说明,请参阅this post

相关问题