找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 127996|回复: 53

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

[复制链接]
发表于 2009-3-27 21:19:34 | 显示全部楼层 |阅读模式
在别的论坛看到这个题目,大家没事练练手吧,看都有些什么方法实现。
要求:对用户的输入进行判断,字符数不能少于3个,大于10个,且必须是字母(不分大小写)
发表于 2009-3-27 22:07:34 | 显示全部楼层
  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
复制代码

评分

参与人数 2PB +13 收起 理由
随风 + 5 不错!
pusofalse + 8 精彩

查看全部评分

 楼主| 发表于 2009-3-27 22:15:27 | 显示全部楼层

回复 2楼 的帖子

未对大小写作判断。。

评分

参与人数 1PB +2 收起 理由
tireless + 2 delims里的字母竟区分大小写,才知道。

查看全部评分

发表于 2009-3-27 22:39:49 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +8 收起 理由
随风 + 8 不错!

查看全部评分

 楼主| 发表于 2009-3-27 22:46:16 | 显示全部楼层

回复 4楼 的帖子

>nul2>nul  两句中间应该要个空格吧。
发表于 2009-3-27 22:50:07 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +5 收起 理由
随风 + 5 对各种错误都进行了明确提示,导致代码超长

查看全部评分

发表于 2009-3-27 22:50:27 | 显示全部楼层
  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 编辑 ]

评分

参与人数 1PB +2 收起 理由
随风 + 2 思路还是不错的!

查看全部评分

 楼主| 发表于 2009-3-27 22:55:29 | 显示全部楼层

回复 7楼 的帖子

I 服了 you !
思路倒是不错,只是代码。。。。。
发表于 2009-3-27 23:01:08 | 显示全部楼层

回复 4楼 的帖子

输入off
代码出现误判
^_^
 楼主| 发表于 2009-3-27 23:03:54 | 显示全部楼层
batcher 真是细心  echo.%input% 就可以解决了
发表于 2009-3-27 23:08:25 | 显示全部楼层

回复 9楼 的帖子

哈哈,batcher思维果然严谨
发表于 2009-3-27 23:13:21 | 显示全部楼层
7楼代码已修改。

代码难看不代表效率低啊

[ 本帖最后由 tireless 于 2009-3-27 23:34 编辑 ]
发表于 2009-3-27 23:15:10 | 显示全部楼层

回复 12楼 的帖子

7楼是不是再改改?否则遇到off一样会误判^_^
 楼主| 发表于 2009-3-27 23:17:28 | 显示全部楼层

回复 12楼 的帖子

处理 off 的办法以在10楼解决,不行么?
代码除了要讲究效率以外,还要在可能的情况下讲究简洁和美观。
发表于 2009-3-27 23:19:37 | 显示全部楼层

回复 14楼 的帖子

可以啊,我只是建议tireless兄更新一下7楼的代码 :)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:21 , Processed in 0.024431 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表