我想在批处理文件中写一个if not语句,以确保变量必须等于某些值。就像让我们说如果我想要一个性别的变量,我给用户选择
set /p sex=Sex:
我想确保他们只能放入像男/女,男/女或m / f这样的值,否则它会循环回到同一行。
答案 0 :(得分:2)
您可以这样做:
:EnterSex
ECHO Valid values are: (M)ale / (F)emale
SET /P sex=Sex:
REM Validate user entered value.
SET Result=null
FOR /F "usebackq tokens=* delims=" %%A IN (`ECHO ~M~Male~F~Female~ ^| FINDSTR /I ~%sex%~`) DO SET Result=%%A
IF "%Result%" == "null" (
ECHO The value entered is not valid.
GOTO EnterSex
)
REM If we get here the value entered was valid.
因此,在上面,有效值包装在分隔符(在此示例中为~
)中,然后将所有可能的结果传递给不区分大小写的匹配项(FINDSTR
命令),该命令包装了用户输入分隔符。
如果找到匹配项,则会将其设置为%Result%
变量,否则该值将保持为null
。
答案 1 :(得分:1)
使用扩展搜索和替换(不区分大小写)来查看输入的值是否包含在有效值列表中。请注意有效列表开头和结尾所需的空格。
@echo off
setlocal enableDelayedExpansion
set "validSex= m f male female "
:getSex
set "sex="
set /p "sex=Sex: "
if "!validSex: %sex% =!" equ "!validSex!" goto :getSex
答案 2 :(得分:0)
一种方式:
@echo off
setlocal
:SEXY
set /p sex=Sex:
for %%a in (MALE,FEMALE,F,M) DO (
if /I %sex% EQU %%a (
set "selected_sex=%%a"
GOTO OK:
)
)
GOTO SEXY:
:OK
echo you are: %selected_sex%