[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

  1. @echo off
  2. :repeat
  3. set /p input=请输入:
  4. if "%input:~2,1%" equ "" goto repeat
  5. if "%input:~10,1%" neq "" goto repeat
  6. for /f "delims=abcdefghijklmnopqrstuvwxyz" %%a in ("%input%") do (
  7.   if "%%a" neq "" goto repeat
  8. )
  9. pause
复制代码
2

评分人数

TOP

回复 2楼 的帖子

未对大小写作判断。。
1

评分人数

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

TOP

  1. @echo off
  2. :repeat
  3. set/p input=请输入:
  4. if "%input:~2,1%" equ "" goto repeat
  5. if "%input:~10,1%" neq "" goto repeat
  6. echo.%input%|findstr/i "^[a-z]*$">nul2>nul||goto repeat
  7. pause
复制代码

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

评分人数

TOP

回复 4楼 的帖子

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

TOP

  1. @echo off
  2. rem 限制输入3位至10位字母
  3. set LenMin=3
  4. set LenMax=10
  5. 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
  6. :GetInput
  7. set input=
  8. set /p "input=请输入3至10位字母:"
  9. if "%input%" neq "" (
  10.   if "%input:~2,1%" equ "" (
  11.     echo 不足%LenMin%位
  12.     goto :GetInput
  13.   ) else if "%input:~10,1%" neq "" (
  14.     echo 多于%LenMax%位
  15.     goto :GetInput
  16.   )
  17. ) else (
  18.   echo 输入不能为空
  19.   goto :GetInput
  20. )
  21. setlocal enabledelayedexpansion
  22. for %%a in (%AllLetter%) do (
  23.   set input=!input:%%a=!
  24.   if "!input!" equ "" (
  25.     goto :RightInput
  26.   )
  27. )
  28. if "!input!" neq "" (
  29.   echo 只能输入纯字母[a-zA-Z]
  30.   endlocal
  31.   goto :GetInput
  32. )
  33. :RightInput
  34. echo 恭喜输入正确
  35. pause
复制代码

[ 本帖最后由 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

  1. @echo off&setlocal enabledelayedexpansion
  2. :repeat
  3. set /p input=请输入:
  4. echo !input!>%temp%\#tmp#
  5. 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
  6. pause
复制代码
或者:
  1. @echo off
  2. :repeat
  3. set /p input=请输入:
  4. (call set/p="%%input%%"<nul&echo.)>%temp%\#tmp#
  5. 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
  6. pause
复制代码

[ 本帖最后由 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

返回列表