在批处理中设置变量的变量

时间:2014-01-19 22:39:51

标签: batch-file cmd

我正在尝试使用a1a9有效地将变量!%f%!命名为!%q%!。 我尝试创建一个for循环来完成这个:

set w=0
for %%K in (f g h i k l m o q) do (
    set /a w+=1
    set /a b%w%=%!%%K!%
    set /a a%w%=!b%w%!%%13
)

错误是缺少运算符,所以我假设括号和感叹号被误读。我该如何解决这个问题?

TL; DR

请:

set /a a1=!%f%!%%13
...
set /a a9=!%q%!%%13

...更有效率。

澄清一下,%f%等于4D,%4D%等于9。

我需要9和13的模数作为a1。

2 个答案:

答案 0 :(得分:2)

我相信根据您的问题下方的评论,您面临的至少一个问题是,4D的变量名称将由SET /A解释为数字4,后跟变量D,这将是无效的。

您遇到的另一个问题是%w%的扩展将是循环内的常量值。您需要延迟展开!w!

我相信这就是你想要的。

set w=0
for %%K in (f g h i k l m o q) do (
  set /a w+=1
  for %%V in (!%%K!) do set /a a!w!=!%%V!%%13
)

如果您的变量名称都没有以数字开头,那么您只需使用

即可
set w=0
for %%K in (f g h i k l m o q) do (
  set /a w+=1
  set /a a!w!=!%%K!%%13
)

我尽量避免使用数字作为变量名的前导字符,原因有两个:

1)正如您在问题中遇到的那样,SET / A不会正确扩展变量。

2)%4D%的正常扩展将被解释为参数%4的值,后跟D,然后是将从结果中剥离的%

答案 1 :(得分:0)

setLocal enableDelayedExpansion
set w=0
for %%K in (f g h i k l m o q) do (
    set /a w+=1
    set a!w!=^^!%%%%K%%^^!%%%%13
)

:: as a test
echo !a5!

这应该可以帮到你。克拉^是批量转义字符。