返回列表 发帖

[出题]批处理限制输入只能为字母且个数在3-10之间

在别的论坛看到这个题目,大家没事练练手吧,看都有些什么方法实现。
要求:对用户的输入进行判断,字符数不能少于3个,大于10个,且必须是字母(不分大小写)
技术问题请到论坛发帖求助!

@echo off
:repeat
set /p input=请输入:
if "%input:~2,1%" equ "" goto repeat
if "%input:~10,1%" neq "" goto repeat
for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("%input%") do (
  if "%%a" neq "" goto repeat
)
pauseCOPY
2

评分人数

TOP

回复 2楼 的帖子

未对大小写作判断。。
1

评分人数

    • tireless: delims里的字母竟区分大小写,才知道。PB + 2
技术问题请到论坛发帖求助!

TOP

@echo off
:repeat
set/p input=请输入:
if "%input:~2,1%" equ "" goto repeat
if "%input:~10,1%" neq "" goto repeat
echo.%input%|findstr/i "^[a-z]*$">nul2>nul||goto repeat
pauseCOPY

[ 本帖最后由 zhouyongjun 于 2009-3-27 23:08 编辑 ]
1

评分人数

TOP

回复 4楼 的帖子

>nul2>nul  两句中间应该要个空格吧。
技术问题请到论坛发帖求助!

TOP

@echo off
rem 限制输入3位至10位字母
set LenMin=3
set LenMax=10
set AllLetter=a b c d e f g h i j k l m n o p q r s t u v w x y z
:GetInput
set input=
set /p "input=请输入310位字母:"
if "%input%" neq "" (
  if "%input:~2,1%" equ "" (
    echo 不足%LenMin%
    goto :GetInput
  ) else if "%input:~10,1%" neq "" (
    echo 多于%LenMax%
    goto :GetInput
  )
) else (
  echo 输入不能为空
  goto :GetInput
)
setlocal enabledelayedexpansion
for %%a in (%AllLetter%) do (
  set input=!input:%%a=!
  if "!input!" equ "" (
    goto :RightInput
  )
)
if "!input!" neq "" (
  echo 只能输入纯字母[a-zA-Z]
  endlocal
  goto :GetInput
)
:RightInput
echo 恭喜输入正确
pauseCOPY

[ 本帖最后由 Batcher 于 2009-3-29 14:20 编辑 ]
1

评分人数

    • 随风: 对各种错误都进行了明确提示,导致代码超长PB + 5
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

@echo off&setlocal enabledelayedexpansion
:repeat
set /p input=请输入:
echo !input!>%temp%\#tmp#
findstr /xi "[a-z][a-z][a-z] [a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]" %temp%\#tmp# >nul || goto repeat
pauseCOPY
或者:
@echo off
:repeat
set /p input=请输入:
(call set/p="%%input%%"<nul&echo.)>%temp%\#tmp#
findstr /xi "[a-z][a-z][a-z] [a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]" %temp%\#tmp# >nul || goto repeat
pauseCOPY

[ 本帖最后由 tireless 于 2009-3-27 23:47 编辑 ]
1

评分人数

    • 随风: 思路还是不错的!PB + 2

TOP

回复 7楼 的帖子

I 服了 you !
思路倒是不错,只是代码。。。。。
技术问题请到论坛发帖求助!

TOP

回复 4楼 的帖子

输入off
代码出现误判
^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

batcher 真是细心  echo.%input% 就可以解决了
技术问题请到论坛发帖求助!

TOP

回复 9楼 的帖子

哈哈,batcher思维果然严谨

TOP

7楼代码已修改。

代码难看不代表效率低啊

[ 本帖最后由 tireless 于 2009-3-27 23:34 编辑 ]

TOP

回复 12楼 的帖子

7楼是不是再改改?否则遇到off一样会误判^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12楼 的帖子

处理 off 的办法以在10楼解决,不行么?
代码除了要讲究效率以外,还要在可能的情况下讲究简洁和美观。
技术问题请到论坛发帖求助!

TOP

回复 14楼 的帖子

可以啊,我只是建议tireless兄更新一下7楼的代码 :)
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表