2017-12-19 8 views
0

バッチファイルに問題があります。このファイルは、ユーザからの2つの数字の入力を受け入れ、次にサインの入力を受け入れるべきです。その後、ユーザーが "+"記号で入力したものと比較しますが、機能していません。"+"記号とバッチファイルのif文を使用してユーザーが入力した変数との比較

たぶん、あなたは私のコードからよりよく理解することができるようになります:

echo please enter first number 
set /p number0= 

echo please enter second number 
set /p number1= 

echo enter one of the numbers - ^+ -/^* 
set /p symbol="set the variable: " 

echo %symbol% 
set plus=+ 
echo %plus% 
pause 

if /i "%symbol%" EQU "+"(
    echo your choice is to sum up the numbers 
    pause 
    set /a answ = %number0% + %number1% 
    echo answer: 
    echo %answ% 
) 

私はすでに、私は想像することができた任意の組み合わせで引用符を使用しようとした、if /i %symbol% == plusを使用してみました。私はこのような演算子に変数set /p plus="+"を割り当てようとしましたが、シンボル変数の周りに ""を使用しています。

しかし、変数がシンボルと比較される部分に到達した後も何も動作しません+私のバッチファイルがクラッシュします。すべての変数は正しく割り当てられています。

これは、必要であればフルファイルを見るためのリンクですが、フルファイルは英語では書かれていません(https://1drv.ms/u/s!Ap4-t2P-Igzihb5shQZLNkKySEWOrQ)。

+0

IF/I 'で'/i' "%シンボル%" EQU「+ "駄洒落だから無駄だ"式で大文字と小文字を区別する検索が動作する –

+0

ここで質問を書くとき、一般的に '
'改行は必要ありません - 段落ははるかに読みやすくなります。 – halfer

+0

[もっと速い回答を得るために、どのような状況で私の質問に「緊急」や他の類似のフレーズを追加することができますか?](// meta.stackoverflow.com/q/326569) - 要約は、ボランティアに対処する理想的な方法であり、回答を得ることはおそらく非生産的です。これをあなたの質問に追加しないでください。 – halfer

答えて

1

私はif文なしで同じことをする方法を見つけました。

set /p number1= 
set /p number2= 
set /p symbol= 
set /a answ=%number1%%symbol%%number2% 
+0

'Set/A'では、通常は可変文字を使う必要はありません(**'% '**または**'! '** **);例えば'Set/A result = integer1演算子integer2'です。 – Compo

1

私はこのコードをお勧め::

@echo off 
setlocal EnableExtensions EnableDelayedExpansion 
set Number1= 
set /P "Number1=First number: " 
set Number2= 
set /P "Number2=Second number: " 

:EnterOperator 
set Operator= 
set /P "Operator=Math. operator: " 
if not defined Operator goto EnterOperator 
if "!Operator!" == "+" goto EvaluateExpression 
if "!Operator!" == "-" goto EvaluateExpression 
if "!Operator!" == "*" goto EvaluateExpression 
if "!Operator!" == "/" goto EvaluateExpression 
goto EnterOperator 

:EvaluateExpression 
set /A Result=Number1 %Operator% Number2 
echo The result is: %Result% 
endlocal 

慎重式を算術に関するset /?コマンドプロンプトウィンドウを実行しているのヘルプ出力を読むことは、私はちょうどこれを行うことができ判明します。算術式では可能な限り環境変数名Number1Number2を使用するだけで、ユーザーが入力した文字列は何もないかもしれませんし、整数でもない場合もあります。この場合、Windowsのコマンド・インタープリタは既存の環境変数または無効な文字列算術式の評価では値が0になります。

算術演算子を評価する前に遅延環境変数の拡張を使用して演算記号を評価する必要があります。そうでない場合はWindowsコマンドインタープリタがエラーメッセージを出力する可能性があります。オペレータのためのプロンプト。

このコードではゼロ除算が可能です。

このコマンドラインを実行する前に演算式で展開する前に演算子の文字列を比較する際に遅延環境変数式を使用する理由については、Use IF statement on variables with unacceptable symbols (e.g./or :)を参照してください。 Why is no string output with 'echo %var%' after using 'set var = text' on command line?も参照してください。SET構文に関する一般情報を参照してください。

使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。

  • echo /?
  • endlocal /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?
関連する問題