2017-08-24 2 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%のようなものに置き換えられます。同じものを使って方程式を変える方法はありますか?変数はその値で置き換えられますか?

+0

読む小文字を区別しません)、call/forを使って[別の展開を強制する](https://stackoverflow.com/questions/1199931/how-to-expand-ac) md-shell-variable-twice-recursively) – LotPings

+1

これは必須ではありません。 'SET/A'コマンドの式に現れる_変数名_は自動的に変数値に置き換えられます。私。 '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%を開始するすべての変数を(set equation=%equation%は動作しません)。 nameが定義されていない場合、2>nulはエラーメッセージを抑制します。キャレット(^)は>cmdを伝え、>forではなくsetコマンドの一部であることを示しています。

for /fは二つの部分にset行を分割 - その区切り文字の前と後に、そのname%%b%%avalueに行くことに。 名前開始ので、それはnamenamednamesなどと一致しますが、その結果、我々は名前が正確に一致する出力ライン(したがってif)を選択すると、一致大文字を作成する必要があることを今set意志出力任意の名前[delayedexpansion](http://ss64.com/nt/delayedexpansion.html上(ifコマンドの/i

とテストが渡された場合、選択した変数に値を代入します。

関連する問題