0

何らかの理由で故障している選択メニューがあります。コード:

: uninstallerMenu
echo REMOVE ME!  total items %count%
set uninstallNr=
set /P uninstallNr=Please select a number:  
echo %uninstallNr%
if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu
:: Uninstaller Error Handler
: uninstallerError
cls
echo.
echo ==================== INVALID INPUT ====================
echo _______________________________________________________
echo.
echo    Please select a number or 'M' to go to Main Menu
echo _______________________________________________________
echo.
echo ============== PRESS ANY KEY TO CONTINUE ==============
pause>null
cls
if '%opt%'=='64' goto progList64
if '%opt%'=='32' goto progList32
goto menu

問題は、以下のチェックにあります。%uninstallRn% LEQ %count% を入力すると、それがチェックされ、それが true であればアンインストーラーに送信されます。M キーを押すと本来の動作が実行されますが、Enter キーを押すとスクリプトが中断されます。

今私が追加すると

if '%uninstallNr%'=='' goto uninstallerError

if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu

次に、すべてが uninstallerError セクションに移動します?!?! 私は何を間違っていますか?

4

1 に答える 1

0

問題はほとんどありません。

もしかして

if not defined uninstallnr goto wherever

引用されたバージョンよりも優れています。YMMV。

第 2 にIF /I、比較は文字ごとに行われるため、「1」は「2」よりも小さいため、「12」は「2」よりも小さくなります。

そして 3 番目に、バッチはラベルを介して単純に課金されるため、条件が真でなかったために IF ステートメントがどこにも GOTO されない場合、バッチは単に:uninstallerErrorラベルを超えて継続します - ちなみに、スペースが含まれていない可能性があります。少なくとも、それを目的地として使用する場合GOTO(またはCALLそれについて)

ああ、二重引用符は文字列を定義する方法です。一重引用符を使用するか[]、変数にスペース(および他のいくつかの文字)が含まれていない場合にのみ機能します

また、それは ではありませんnull(nulというファイルを作成しますnull)


AIUI、あなたの現在のコードは

SETLOCAL
SET count=3
set uninstallNr=
set /P uninstallNr=Please select a number:  
echo %uninstallNr%
if '%uninstallNr%'=='' goto uninstallerError
if /I %uninstallNr% LEQ %count% goto uninstaller
if /I '%uninstallNr%'=='M' goto menu
:: Uninstaller Error Handler
:uninstallerError
ECHO AT uninstallererror
GOTO :eof
:uninstaller
ECHO AT uninstaller
GOTO :eof
:menu
ECHO AT menu
GOTO :eof

または類似。

COUNT インラインを設定しました。

1、2、または 3 のエントリは、UNINSTALLER に問題なく進みます。m から Menu に、それ以外の場合は UNINSTALLERROR に移動します。

(あなたがそれをしている間に「0」のエントリを考えてみてください...しかし、それは副次的な問題です...)

于 2013-04-10T18:49:06.820 に答える