检查用户输入是否满足要求并解析其内容

时间:2019-06-09 03:23:15

标签: batch-file

我想创建一个批处理文件,提示用户输入长度为6个数字的数字序列。我还想检查该输入是否包含例如数字5中的三个。

@echo off
set /p UserInput=
if %UserInput% has........(
goto Number_Has_Three_5
)else(
goto Number_Dosent_Have_Three_5
)

这将检查输入是否仅包含数字,然后检查其中是否包含五个数字中的三个。

例如,数字111155的长度为6个数字,但没有3个5,因此它将不起作用,并且会显示错误消息。

但是数字111555由于数字5中有3个而不是2个,因此可以使用并且脚本将继续。

2 个答案:

答案 0 :(得分:3)

这是要做4个不同任务的问题:

  • UserInput是否不为空
  • Is UserInput numeric
  • UserInput 6位数字
  • UserInput是否包含三个5s

但是,您的问题有两个歧义:
这三个5是否需要在一起(152535 = false123555 = true)?
可以有三个以上的5(125555 = false555123 = true)吗?

我的代码允许5s出现在6个字符串中的任意位置,如果其中至少有 确切,则输出true。

:: ...
if not defined UserInput (
    echo False. No Input.
    goto:eof
)

set "testVar="
for /f "delims=0123456789" %%i in ("%UserInput%") do set testVar=%%i
if defined testVar (
    echo False. Not Numeric.
    goto:eof
)

set testVar=%UserInput%000000
if not %testVar:~0,6%==%UserInput% (
    echo False. Not 6 digits.
    goto:eof
)

set testVar=%UserInput:5=%
if not defined testVar goto:true
if not %testVar:~3,1%#==# (
    echo False. Less than three 5s.
    goto:eof
)
:: Edit: More than three 5s result in false
if %testVar:~2,1%#==# (
    echo False. More than three 5s.
    goto:eof
)

:true
echo True.
:: ...

答案 1 :(得分:1)

@echo off
:loop 
set /p "userinput=Input: "
echo %userinput%|findstr /r "^[0-9][0-9][0-9][0-9][0-9][0-9]$" >nul || (
    echo invalid input
    goto :loop
)
set "nofives=%userinput:5=%0123456"
set /a fives=%nofives:~6,1%
echo %userinput% has %fives% fives.
if %fives% == 3 goto :three
goto :loop
:three
echo insert your payload here

findstr检查输入是否恰好由6个数字组成。

set nofives...删除所有5并添加一个计数器字符串

%nofives:~6,1%获得第七个字符(计数从零开始!),它是5的计数。

由于这有效地计数五位数(可扩展为最多9个数字的输入 1)),因此您可以自由地处理“恰好是三个”({{ 1}})或“最少三个”(if %fives% == 3)或您想要的任何内容。

为演示其工作原理,我们假设if %fives% geq 3%userinput%(只是为了避免与计数器字符串混淆) 如果我们从abcdef中删除任何内容并添加计数器字符串,则它看起来像:

%userinput%

如果我们删除一个字符(abcdef-> abcdf)并添加计数器字符串,则它看起来像:

abcdef0123456
      ^ this char is the count (seventh char)

依次类推,直到“删除六个字符(对您来说这将是abcdf0123456 ^ this char is the count (seventh char) 的用户输入)。然后看起来像:

555555

1),其中有两个微小变化,最多可扩展到15个数字(使用十六进制计数器字符串):

0123456
      ^ this char is the count (seventh char)