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

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

[复制链接]
发表于 2009-3-28 08:49:08 | 显示全部楼层

回复 17楼 的帖子

如果要使用管道,的确要用到临时文件才行。
http://www.bathome.net/viewthread.php?tid=3830&page=1#pid24372
开始我老想着用findstr判断字符,发现必须要用到临时文件。

[ 本帖最后由 zqz0012005 于 2009-3-28 14:29 编辑 ]
 楼主| 发表于 2009-3-28 19:54:15 | 显示全部楼层
原帖由 zqz0012005 于 2009-3-28 08:49 发表
如果要使用管道,的确要用到临时文件才行。
http://www.bathome.net/viewthread.php?tid=3830&page=1#pid24372
开始我老想着用findstr判断字符,发现必须要用到临时文件。


其实所有的判断都可以用findstr来完成,并不需要临时文件。
兼容大部分特殊符号。

  1. @echo off&set "f=findstr .....|findstr /v ............."
  2. :loop
  3. echo.&set a=a&set var=&set /p var= 请输入3至10位英文字母 &cls
  4. echo."%var%"|%f%|findstr "^"[a-zA-Z]*"$">nul&&set "a="
  5. if defined a (echo  输入错误) else echo  %var% 正确
  6. goto loop
复制代码

[ 本帖最后由 随风 于 2009-3-28 21:02 编辑 ]
发表于 2009-3-28 20:28:55 | 显示全部楼层

回复 32楼 的帖子

31楼说的临时文件估计是想兼容所有特殊符号
发表于 2009-3-28 20:54:26 | 显示全部楼层

回复 32楼 的帖子

输入 Zip,提示“输入错误”
输入 ",显示 """|findstr .....|findstr /v .............|findstr "\"[a-z]*\"$">nul&&set "a="
输入 "&",批处理退出。
 楼主| 发表于 2009-3-28 21:06:07 | 显示全部楼层

回复 34楼 的帖子

已经说明可兼容大部分特殊符号,而不是所有特殊符号,其中引号就是没法处理的
输入 Zip 提示错误,已经改正,由此引发另一个问题,大家可以探讨一下
为什么第一个字母为大写Z时,findstr 就必须指定忽略大小写呢?
echo Zip|findstr "^[a-z]*$" 错误
echo Yip|findstr "^[a-z]*$" 正确
echo Zip|findstr /i "^[a-z]*$" 正确
发表于 2009-3-29 13:06:07 | 显示全部楼层
原帖由 Batcher 于 2009-3-27 22:50 发表
if "!input!" neq "" (
  echo 只能输入纯字母[a-zA-Z]
  goto :GetInput
)
endlocal

这里的endlocal好像执行不到,有必要加吗?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢指正

查看全部评分

 楼主| 发表于 2009-3-29 13:13:49 | 显示全部楼层

回复 36楼 的帖子

执行的到,不信你连续33次输入错误看看。

评分

参与人数 1PB +3 收起 理由
zjw767676 + 3 感谢!

查看全部评分

发表于 2009-3-29 13:49:16 | 显示全部楼层

回复 37楼 的帖子

原来是这样
  1. 请输入3至10位字母:134
  2. 已经达到最大的 setlocal 递归层
  3. 只能输入纯字母[a-zA-Z]
  4. 请输入3至10位字母:
复制代码
去掉endlocal后:
  1. 请输入3至10位字母:134
  2. 已经达到最大的 setlocal 递归层。
  3. 只能输入纯字母[a-zA-Z]
  4. 请输入3至10位字母:135
  5. 已经达到最大的 setlocal 递归层。
  6. 只能输入纯字母[a-zA-Z]
  7. 请输入3至10位字母:136
  8. 已经达到最大的 setlocal 递归层。
  9. 只能输入纯字母[a-zA-Z]
  10. 请输入3至10位字母:
复制代码
感谢随风,受教了!
发表于 2009-3-29 14:01:26 | 显示全部楼层

回复 32楼 的帖子

set "f=findstr .....|findstr /v ............."
请教这个命令怎么解释?
set f=是把命令赋予f,里面的.........是什么意思?
发表于 2009-3-29 14:08:27 | 显示全部楼层

回复 37、38楼 的帖子

确实执行不到endlocal
发表于 2009-3-29 14:13:56 | 显示全部楼层

回复 39楼 的帖子

点,在正则表达式中是通配符,表示任意一位字符。
.. 表示任意2位字符
... 表示任意3位字符
.... 表示任意4位字符
以此类推
 楼主| 发表于 2009-3-29 14:18:11 | 显示全部楼层

回复 40楼 的帖子

确实应该是执行不到,batcher 是否应该考虑改一下endlocal的位置。
发表于 2009-3-29 14:20:51 | 显示全部楼层

回复 42楼 的帖子

Done.
改好了。
发表于 2009-3-30 01:43:12 | 显示全部楼层
32l学习了,思路很别致
发表于 2009-4-6 17:18:00 | 显示全部楼层
  1. @echo off
  2. set /p str=请输入3到10个字母:
  3. set var=%str%
  4. set n=0
  5. :begin
  6. set a=%str:~0,1%
  7. set /a n+=1
  8. set str=%str:~1%
  9. if not "%str%"=="" goto begin
  10. if %n% lss 3 echo 字符数不符&&goto eof
  11. if %n% gtr 10 echo 字符数不符&&goto eof
  12. echo %var%|findstr "[^a-z]">nul&&echo 输入的字符不完全是字母&&goto eof
  13. echo 输入正确!
  14. :eof
  15. pause
复制代码

[ 本帖最后由 cainiao736 于 2009-4-6 22:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 03:01 , Processed in 0.021385 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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