2017-12-04 21 views
0

このコードは、「if」と評価して別の に移動します。私はこのようなメッセージを表示しません: 「2 2 end」または「3 3 end」ですが、 「1端」または「2 1端」である。これで私の新しいことを助けてください。バッチ「IF」コマンドが機能しない

@echo off 
set /p number= 
if %number%=="1" goto 1 
if %number%=="2" goto 2 
if %number%=="3" goto 3 
:1 
echo 1 
goto end 
:2 
echo 2 
goto end 
:3 
echo 3 
goto end 
:end 
echo end 
pause 
+2

引用符を削除するか、変数を引用符で囲みます。 ( 'if'比較はリテラルで正確です。) –

答えて

2

IFコマンドは、純粋に文字列比較であり、数値ではありません。さらに、引用符は、となります。あなたのコードは、文字列"1"で変数numberの値を比較し、そのような

if %number%=="1" goto 1 

としての行が含まれています。ただし、SETステートメントでは、1または2または3と入力する必要があります。引用符は必要ありません。

ユーザーがプロンプトSETへの応答として、空白やヌル文字列を提供する場合、構文エラーを回避するためには、あなたが%number%を引用したい:

if "%number%"=="1" goto 1 

また、あなたは無条件に入れたいですそのサブルーチンを保護するためにラベル:1の前に移動してください。そうでない場合は、12、または3を入力しないと、フォールスルーのためにオプション1が実行されます。

ことも可能です - 私はそれが自分自身をどのように機能するかについて非常に明確ではないよ - あなたの代わりに%!を使用するようにIF秒を変更するには、あなたを必要とする遅延展開を、使用すること:

if "!number!"=="1" goto 1 

SS64にバッチ用の非常に良い参照サイトがあります。 Delayed ExpansionIF commandに特に注意してください。

関連する問題