批处理:获取另一个变量值中存在的变量的值

时间:2017-08-24 22:05:37

标签: batch-file variables

所以,我正在制作一个计算器,允许用户命名他们之前的结果,以便在将来的计算中使用它们。它的工作原理是,当您为前一个结果命名时,它会创建一个选择了名称的变量,然后将其值设置为前一个结果。它看起来像这样:

set /p equation=
::variables need to be replaced here
set /a result=%equation%
::giving a name
set /p name=
set %name%=%result%

问题是,我无法找到一种方法来获取方程中变量的值,因为方程式也是一个变量,因此每当我在%equation%的命令中添加方程时,它只是替换它与1+%named_result%类似。有没有办法可以用相同的方法改变方程,但是变量用它们的值替换? (set equation=%equation%不起作用)

1 个答案:

答案 0 :(得分:0)

for /f "tokens=1*delims==" %%a in ('set %name% 2^>nul') do if /i "%%a"=="%name%" set "result=%%b"

set %name%%name%格式列出以name=value开头的所有变量。如果未定义2>nul,则name会抑制错误消息。插入符号(^)转义>告诉cmd >set命令的一部分,而不是for

for /fset行拆分为两部分 - 在分隔符之前和之后,name转到%%avalue转到%%b {1}}。现在set将输出启动的任何名称​​ name ,以便它匹配namenamed names等。因此,我们需要选择名称完全匹配的输出行(因此为if)并使匹配不区分大小写(/i命令上的if

如果测试通过,请将值分配给您选择的变量。