2017-08-22 13 views
0

私はそれを行うことになっているこれは何このChoiceコマンド(バッチファイル)を動作していないのはなぜ

@echo off 
:1 
cls 
echo Navigation: W-Up, S-Down, E-Enter 
echo _________________________________ 
echo -(Option 1) 
echo Option 2 
echo Option 3 
choice /c WSE /n 
if ERRORLEVEL 1 goto 3 
if ERRORLEVEL 2 goto 2 
if ERRORLEVEL 3 goto opt1 
:2 
cls 
echo Navigation: W-Up, S-Down, E-Enter 
echo _________________________________ 
echo Option 1 
echo -(Option 2) 
echo Option 3 
choice /c WSE /n 
if ERRORLEVEL 1 goto 1 
if ERRORLEVEL 2 goto 2 
if ERRORLEVEL 3 goto opt2 
:3 
cls 
echo Navigation: W-Up, S-Down, E-Enter 
echo _________________________________ 
echo Option 1 
echo Option 2 
echo -(Option 3) 
choice /c WSE /n 
if ERRORLEVEL 1 goto 2 
if ERRORLEVEL 2 goto 1 
if ERRORLEVEL 3 goto opt3 
:opt1 
cls 
echo You chose Option 1 
pause >nul 
exit 
:opt2 
cls 
echo You chose Option 2 
pause >nul 
exit 
:opt3 
cls 
echo You chose Option 3 
pause >nul 
exit 

は、選択メニューのように見えるが、何らかの理由でそれがちょうど絶えず「をループします:1 "2行目から9行目まで何度も繰り返しループしているのですが、なぜこれをやっていますか?どうしたらいいんですか?

+0

エラーレベルを逆にする必要があります。実際には、「ERRORLEVEL 1 goto 1」が「ERRORLEVELが1以上のgoto 1」と解釈されるので、他のIFには全く到達しない。代わりに、EnableExtensions(デフォルト)で利用可能な 'if%errorlevel%== 1 ...'を比較することです – LotPings

+0

'help if' /' If /? 'や[ss64.com/nt/if.html]http: //ss64.com/nt/if.html)が役立ちます – LotPings

答えて

0

choice /?を読んでください。


そのヘルプページによると、ERRORLEVEL(S)は逆の順序でチェックされることになっています。

choice /c WSE /n 
if ERRORLEVEL 3 goto opt3 
if ERRORLEVEL 2 goto 2 
if ERRORLEVEL 1 goto 1 

なぜですか? if ERRORLEVEL 1if %errorlevel% geq 1を意味するためです。また、あなたが行うことができます:findstr

if %errorlevel% equ 1 goto 1 
if %errorlevel% equ 2 goto 2 
if %errorlevel% equ 3 goto opt3 

あるいはスゴ(しかし、より安全を)。ユーザーがうるさく大声でビープ音がする、「WSE」のうち、キーを押した場合我々は本当に、そのset声明が、念の


ちょうど別の通知を必要としない

set errlvl=%errorlevel:~-1% 
echo "%errlvl%"| findstr /l /x /i """1""" && goto :1 
echo "%errlvl%"| findstr /l /x /i """2""" && goto :2 
echo "%errlvl%"| findstr /l /x /i """3""" && goto :opt3 

発生する。あなたはそれらをサイレンシングする方法を見つけるためにmy poorly title questionを調べることができます。

関連する問題