2017-08-24 145 views
0

因此,我制作了一个计算器,允许其用户命名其以前的结果以便在将来的计算中使用它们。它的工作原理是,当你给以前的结果命名时,它会创建一个名称被选中的变量,然后将其值设置为前一个结果。它看起来是这样的:批处理:获取另一个变量的值中存在的变量的值

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%不工作)

+0

阅读来自[delayedexpansion](http://ss64.com/nt/delayedexpansion.html )并使用call/for [强制另一个扩展](https://stackoverflow.com/questions/1199931/how-to-expand-ac md-shell-variable-twice-recursively) – LotPings

+1

这不是必需的。出现在“SET/A”命令公式中的任何_variable name_自动被变量值替换。即'set equation = 1 + named_result' – Aacini

回答

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

set %name%列出所有格式name=value开始%name%的变量。如果没有定义name2>nul将抑制错误消息。脱字号(^)转义>告诉cmd>set命令的一部分,而不是for

for /f拆分set线分为两个部分 - 即分隔符之前和在此之后,所以name%%avalue%%b。现在set将输出的任何名称开始所以它将匹配namenamednames等。因此,我们需要选择其中的姓名完全一致的输出线(因此if),并进行匹配病例不敏感的(在/iif命令。

如果测试通过,则该值指定给所选择的变量。

相关问题