验证已在批处理脚本中输入“X”位数

时间:2014-03-04 17:00:51

标签: windows batch-file if-statement user-input verify

编写批处理脚本。如何通过“/ p”提示验证用户输入的“3”NUMERIC位数?

提示用户:

SET /P SITEID=ENTER SITE # (i.e. 001 - MUST BE 3 DIGITS): 

我需要验证已经输入了3位数字,如果继续使用脚本的话。如果没有好的重新提示用户我选择的消息。

2 个答案:

答案 0 :(得分:1)

@echo off
setlocal
set "Input="
:Prompt
set /p "Input=ENTER SITE # (i.e. 001 - MUST BE 3 DIGITS): "
if not defined Input goto Prompt
set "Input=%Input:"=%"
for /f "delims=0123456789" %%A in ("%Input%") do goto Prompt
for /f "tokens=1* delims=0" %%A in ("10%Input%") do set "Input=%%B"
if %Input%0 geq 10000 goto Prompt
set "Input=000%Input%"
set "Input=%Input:~-3%"
echo Success = %Input%
pause
endlocal
exit /b 0

脚本说明:

  • 提示输入
  • 验证输入
  • 删除毒药报价字符
  • 验证输入仅为数字
  • 删除前导0以进行比较
  • 验证输入小于1000
  • 加回领先0
  • 显示成功
  • 如果任何验证失败,则会再次提示用户

更新

  • 修复前导0删除
  • 添加如何添加回领先0的
  • 的示例

答案 1 :(得分:0)

:loop
    SET /P "SITEID=ENTER SITE # (i.e. 001 - MUST BE 3 DIGITS):"
    echo("%SITEID:"= %"|findstr /rbe /c:"""[0-9][0-9][0-9]""" >nul || ( echo FAIL & goto loop )

它需要%SITEID%变量,删除引号(如果存在)并将数据发送到findstr以测试正则表达式(/r开关):在数据的开头({{ 1}} switch)初始引用(来自/b命令)三个数字字符,一个结束引用(来自echo命令)和结束字符串(echo开关)。如果/e找不到匹配项,则设置errorlevel并执行findstr之后的代码,打印一条消息给控制台并返回||标签再次询问。