【问题标题】:Bat User Selection蝙蝠用户选择
【发布时间】:2017-01-03 15:48:04
【问题描述】:

这是一个我无法找到答案的简单问题。我正在运行一个需要用户输入/选择的脚本。这是有问题的区域:

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 时才有效。我最好的选择是什么?

非常感谢。

【问题讨论】:

  • for 循环之后添加goto noassigngoto :eof 怎么样?

标签: batch-file environment-variables


【解决方案1】:

您可能想查看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."

【讨论】:

  • 谢谢你,这个解决方案可以工作,但在这种情况下,我会选择@MotKohn 的答案,因为它更容易实施。将来会考虑使用“选择”。
【解决方案2】:

for 语句之后添加goto end。然后创建一个名为end 的标签,因为所有其他标签都可以解决您的问题。基本上第一个遇到的标签正在执行,因为它未能通过for 语句。

【讨论】:

  • 每个批处理文件末尾都有一个名为:eof的内置标签;你不必定义它。你也可以用exit /b 代替goto eof
  • @KlitosKyriacou 因为我没有看到整个文件,我不知道 OP 是否想要结束或做其他事情。我的意思是结束选项。
  • 感谢这个简单的回答。在这种情况下,我确实想继续其他提示等。所以我没有去“结束”,而是让脚本移动到脚本的更相关部分。
猜你喜欢
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2011-06-13
  • 2014-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多