2016-06-22 4 views
0

基本的なバッチ式の数学スクリプトを試していますが、常にオペランドが見つからないと教えてくれます。私はここで同様の問題を調べて構文にマッチしようとしましたが、同じエラーが発生しました。ここでのスクリプトは次のとおりです。基本バッチ・マス変換 - 欠落しているオペランド?

@echo OFF 
set /p Choice=(a) Amps to Horse Power, (h) Horse Power to Amps: 
set /p VOLTAGE=ENTER VOLTAGE: 
if %Choice%==a (
    set /p AMPS=ENTER AMPS: 
    set /a WATT=%VOLTAGE%*%AMPS% 
echo power is:%WATT% 
    REM set /a HP=%WATT%/746 
    REM echo %HP% 
) 
if %Choice%==h (
    set /p HP=ENTER HORSEPOWER: 
    set /a AMPS=((%HP% * 746)/%VOLTAGE%) 
echo %AMPS% 
) 
+0

使用するか、 '設定/ "AMPS =((%HP%* 746)/%の電圧%)" や' 'セット/ AMPS = ^(^(%HP %* 746 ^)/%VOLTAGE%^) ';コマンド・インタープリタ( 'cmd')は、最初の') 'を'%%Choice%== h( ')の終わりのものと見なしているので、ここでのカッコは閉じています; 'または'^'の前にそれらをエスケープすると 'cmd'からそれらを隠す... – aschipfl

+0

まだ同じ問題:/について知っている良い情報) – Russ

+0

ああ、そうです。すべての 'set/a'コマンドラインで周囲の'% '記号をすべて削除してください(例えば 'set/a WATT = VOLTAGE * AMPS ')。さもなければ、 '%AMPS%'はその値に評価されます*前にペーストされたコードのカッコで囲まれたブロックが実行されます。これは何も実行されません... – aschipfl

答えて

0

あなたのコード内のいくつかの問題があります。

  • コマンドインタプリタcmdのための特別な意味を持っている括弧を含むset /a AMPS=((%HP% * 746)/%VOLTAGE%)コマンドラインでの式:最初の)if %Choice%==h (コマンドの閉じ括弧とみなされます。これを克服するには、算術式全体をset /a "AMPS=((%HP% * 746)/%VOLTAGE%)"のように引用符で囲むか、かっこでset /a AMPS=^(^(%HP% * 746 ^)/%VOLTAGE% ^)のようにエスケープします。
  • 変数を設定/変更して同じ括弧内のコードブロックで読み込むと、ブロック全体が実行される前に存在する値が表示されます。これを克服するには、delayed expansionを使用します。しかし、この特定のケースでは、set /a WATT=VOLTAGE*AMPSのようなすべてのset /aコマンドライン内の囲み記号を削除すると、さらに簡単になります。 set /aコマンドは、%%を除いて、それ自身で変数名を検出します。受信した値は、コードブロックが開始される前に利用可能な値ではなく、set /aコマンドが実行された瞬間に存在します。残りの唯一のものは符号を省略できないechoコマンドです。 call echo %%AMPS%%のようなcall-trickを使用すると、このコマンドラインが実行されるとすぐに別の解析フェーズが実行され、その時点で変数値が使用可能になります(上記の動作はset /aと同様に遅延拡張されます) 。
  • ifユーザーが何も入力せずにENTERを押すだけでクエリが失敗するので、両方の比較式を引用符で囲み、次のようなことを避けてください。if /i "%Choice%"=="a";比較を大文字と小文字を区別しないようにするには、スイッチ/iも追加します。
  • 特殊文字((,)など)の問題を避けるため、表示メッセージset /pを二重引用符で囲んでください。set /p Choice="(a) Amps to Horse Power, (h) Horse Power to Amps:"。ここ

私はおそらく使用するコードが完了した変換Amps to Horse Powerとし、(最も近い整数に)丸めであるset /A支持体は、32ビット整数算術演算を締結しているため(分割のために実装するので、任意の)小数部分が却下されている可能性:

@echo off 
set /A "FACTOR=746" 
set /A "ROUND=1" & rem set to `1` for rounding and to `0` otherwise; 
set /P SEL="(a) Amps to Horse Power, (h) Horse Power to Amps: " 
set /P VOLTS="Enter Voltage: " 
if /I "%SEL%"=="a" (
    set /P AMPS="ENTER AMPS: " 
    set /A "HP=(2*AMPS*VOLTS+ROUND*FACTOR)/(2*FACTOR)" 
    call echo Horse Power is: %%HP%% 
) 
if /I "%SEL%"=="h" (
    set /P HP="Enter Horse Power: " 
    set /A "AMPS=(2*HP*FACTOR+ROUND*VOLTS)/(2*VOLTS)" 
    call echo Amps is: %%AMPS%% 
) 
+0

AWESOME! !詳細な説明と時間と情報をありがとう:D – Russ

関連する問題