2017-01-03 3 views
1

Это простой вопрос, на который я не смог найти ответ. Я запускаю скрипт, который требует ввода/выбора пользователя. Вот проблемная область:Bat User Selection

echo W -- WATCH_SCALE 
echo E -- EARRING_SCALE 
echo R -- RING_SCALE 
echo B -- BOX 

set /P rnFunc="choose a script: " 
for %%I in (W E R B x) do if #%rnFunc%==#%%I goto assign%%I 

Скрипт работает, если пользователь вводит правильную букву, однако, если пользователь вводит неопределенную букву, такие как «T» сценарий продолжается на первый вариант, а не ломать. Я бы хотел, чтобы это работало только в том случае, если пользователь вводит W, E, R или B. Каким будет мой лучший вариант?

Большое спасибо.

+1

Как насчет добавления 'goto noassign' или' goto: eof' сразу после цикла 'for'? – aschipfl

ответ

2

Добавление goto end сразу после заявления for. Затем сделайте ярлык под названием end после того, как все остальные метки должны решить вашу проблему. В основном выполняется первая встречаемая метка, так как она не сработала с оператором for.

+0

В конце каждого командного файла есть встроенная метка ': eof'; вам не нужно его определять. Вы также можете сделать 'exit/b' вместо' goto eof'. –

+0

@KlitosKyriacou, что я не вижу весь файл, я не знаю, хочет ли OP закончить или сделать что-то еще. Я просто имел в виду конец вариантов. – MotKohn

+0

Спасибо за этот простой ответ. В этом случае я хочу перейти к другим приглашениям и т. Д., Поэтому вместо того, чтобы «закончить», я перехожу к более важной части скрипта. – Garrett

4

Вместо этого вы можете взглянуть на команду CHOICE.

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text] 

Description: 
    This tool allows users to select one item from a list 
    of choices and returns the index of the selected choice. 

Parameter List: /C choices  Specifies the list of choices to be created. 
         Default list is "YN". 

    /N     Hides the list of choices in the prompt. 
         The message before the prompt is displayed 
         and the choices are still enabled. 

    /CS     Enables case-sensitive choices to be selected. 
         By default, the utility is case-insensitive. 

    /T timeout  The number of seconds to pause before a default 
         choice is made. Acceptable values are from 0 to 
         9999. If 0 is specified, there will be no pause 
         and the default choice is selected. 

    /D choice  Specifies the default choice after nnnn seconds. 
         Character must be in the set of choices specified 
         by /C option and must also specify nnnn with /T. 

    /M text   Specifies the message to be displayed before 
         the prompt. If not specified, the utility 
         displays only a prompt. 

    /?     Displays this help message. 

    NOTE: The ERRORLEVEL environment variable is set to the index of the 
    key that was selected from the set of choices. The first choice listed 
    returns a value of 1, the second a value of 2, and so on. If the user 
    presses a key that is not a valid choice, the tool sounds a warning 
    beep. If tool detects an error condition, it returns an ERRORLEVEL 
    value of 255. If the user presses CTRL+BREAK or CTRL+C, the tool 
    returns an ERRORLEVEL value of 0. When you use ERRORLEVEL parameters 
    in a batch program, list them in decreasing order. 

Examples:  
CHOICE /?  
CHOICE /C YNC /M "Press Y for Yes, N for No or C for Cancel."  
CHOICE /T 10 /C ync /CS /D y  
CHOICE /C ab /M "Select a for option 1 and b for option 2."  
CHOICE /C ab /N /M "Select a for option 1 and b for option 2." 
+0

Спасибо за это, это решение сработает, но в этом случае я пойду с ответом от @MotKohn, поскольку его было бы проще реализовать. Будут рассматривать использование «выбора» в будущем. – Garrett