2015-08-15 2 views
1

У меня есть окна пакетный файл, который выглядит следующим образом:Windows, пакетный вариант выбора

choice /C:123 /n /m "Generate output? (1. Debug only 2. Production only 3. Both debug and production)" 
if errorlevel==1 (
    echo 1 
) 
if errorlevel==2 (
    echo 2 
) 
if errorlevel==3 (
    echo 3 
) 

Проблема заключается в том, когда пользователь выбирает 3, он отзовется из 1, 2 и 3. Что должно эхо только 3. Как я могу это решить?

+0

Обратный выбор. 'if errorlevel == 3 ... if errorlevel == 2 ... if errolevel == 1'. –

+0

@KenWhite То же самое. Это просто эхо в обратном порядке. – user1995781

+2

Используйте '% errorlevel%' вместо 'errorlevel'. – SomethingDark

ответ

3

Решение находится в комментарии SomethingDark. Причины, почему ваш скрипт не потому, что = является стандартным разделителем в пакетных файлах (например, <space><tab>;,) и ваши условия имеют другую форму IF команды отличаются от сравнения:

IF ERRORLEVEL N execute command 

Что значит - if errorlevel равно или больше N выполните команду. So that's why with 3 all conditions are performed.

А для реального равенства проверить вам необходимо:

choice /C:123 /n /m "Generate output? (1. Debug only 2. Production only 3. Both debug and production)" 
if %errorlevel% EQU 1 (
    echo 1 
) 
if %errorlevel% EQU 2 (
    echo 2 
) 
if %errorlevel% EQU 3 (
    echo 3 
) 

Ум, который == всегда заставляет сравнение строк и EQU, NEQ, LSS, LEQ, GTR, GEQ являются правильными переключателями для количественного сравнения (что не так уж важно, когда вы выполняете проверку равенства)