如何确保批处理变量必须等于某些值?

时间:2014-12-18 14:30:39

标签: batch-file if-statement

我想在批处理文件中写一个if not语句,以确保变量必须等于某些值。就像让我们说如果我想要一个性别的变量,我给用户选择

set /p sex=Sex:

我想确保他们只能放入像男/女,男/女或m / f这样的值,否则它会循环回到同一行。

3 个答案:

答案 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%
相关问题