2017-08-24 96 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命令。

如果測試通過,則該值指定給所選擇的變量。

相關問題