验证用户输入是多个允许的单词之一

时间:2018-04-26 11:22:45

标签: windows batch-file

所以我遇到了这行代码的问题,这是为了检查用户输入是否与给定选项匹配。

set /p "myVar=---> " 
echo %myVar%|findstr /ix "red:Red:blue:Blue">nul && ( 
 echo %myVar% matched 
 ) || ( 
 echo %myVar% not matched 
 ) 

有没有办法可以像上面或其他任何方式去做?

3 个答案:

答案 0 :(得分:1)

您可以利用for /F在零迭代情况下返回1退出代码的事实:

set /P VAR="Enter something: " || ((echo Empty input!) & exit /B)
(for /F "delims=AaEeIiOoUuYy eol=y" %%K in ("%VAR%") do rem/) && (
    echo No match found!
) || (
    echo Match encountered.
)

如果输入仅包含delims=之后列出的字符,则for /F循环不会迭代并返回退出代码1; &&后面的命令仅在退出代码为0时执行,||后面的命令仅在退出代码不是0时才执行。
如果未提供任何输入,set /P会将退出代码设置为1

答案 1 :(得分:0)

以下是您要执行的操作的基本示例。我没有在DOS下测试,因为我没有任何VM(或非常旧的计算机),但IIRC也可以在普通的DOS下工作。

@echo off
if %var% == A GOTO :anything
if %var% == E GOTO :anything
if %var% == I GOTO :anything
if %var% == O GOTO :anything
if %var% == U GOTO :anything
if %var% == Y GOTO :anything
goto end
:anything
echo anything
:end

答案 2 :(得分:0)

我想,choice是你最好的朋友。但是如果你想在没有choice的情况下这样做(它在所有Windows版本中都不可用):

set /p "myVar=---> "
echo %myVar%|findstr /ix "a e i o u y">nul && (
  echo %myVar% matched
) || (
  echo %myVar% not matched
)

它要求输入并检查它是否恰好是列表中的一个字符,忽略大写。