所以我遇到了这行代码的问题,这是为了检查用户输入是否与给定选项匹配。
set /p "myVar=---> "
echo %myVar%|findstr /ix "red:Red:blue:Blue">nul && (
echo %myVar% matched
) || (
echo %myVar% not matched
)
有没有办法可以像上面或其他任何方式去做?
答案 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
)
它要求输入并检查它是否恰好是列表中的一个字符,忽略大写。