我正在尝试使用a1
到a9
有效地将变量!%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。
答案 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!
这应该可以帮到你。克拉^
是批量转义字符。