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

[文本处理] 【分享】利用批处理命令Findstr限制只允许输入数字的代码

利用Findstr加正则[0-9]简单做了一个批处理限制输入为数字的代码模型。和大家分享下。因初学,代码可能不是太专业,还望大神指点一二。
  1. @echo off
  2. :input
  3. set /p m=请输入数字:
  4. echo %m% | findstr /r "[0-9]" >nul
  5. if %errorlevel% equ 0 (goto :do) else (echo 输入错误&goto :input)
  6. :do
  7. echo ok!
  8. goto :end
  9. :end
  10. pause>nul
复制代码
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

回复 7# Linuxer


    如果变量 Input 值为 abc,a%input%a即aabca,%%a为aabca,%%b为空
如果变量 Input 值为 123,那么a%input%a即为a123a,%%a为a,%%b为a

TOP

回复 11# Linuxer


    连续写8个[0-9]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 8# Batcher


    看来还是不完美,,想不出了,除了用/BE之外,还能怎么判断。
批处理里边怎么使用正则表达式呢?比如想判断8位数字。\d{8}这个怎么在bat里实现呢。。测试老会也不对。
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

回复 5# CrLf


    这个不知道咋用的,,,我带入进代码不生效。
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

本帖最后由 apang 于 2014-9-17 12:32 编辑

回复 5# CrLf


    奇数个双引号的情况貌似不太容易碰到?个人认为

TOP

回复 6# Linuxer


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

TOP

回复 4# apang


    非常感谢~findstr开关不一样,学习了。for循环的那个,如果是输入的字母,如abc,那没有数字,delims是怎么来分的呢。
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

本帖最后由 Linuxer 于 2014-9-17 11:18 编辑

回复 3# Batcher


    大于小于号可以给变量加引号能解决,想起来了,123abc可以用\<>\来判断,不知道这样对不对。我测试了可以正常判断123abc这样的。
  1. @echo off
  2. :input
  3. set /p m=请输入数字:
  4. echo "%m%" | findstr /r "\<[0-9]>\" >nul
  5. if %errorlevel% equ 0 (goto :do) else (echo 输入错误&goto :input)
  6. :do
  7. echo ok!
  8. goto :end
  9. :end
  10. pause>nul
复制代码
问题解决后,请在标题前面注明[已解决],并给回答者加分——化繁为简,提高工作效率!

TOP

回复 4# apang


假如 %m% 含双引号呢?
如果非要用 echo var | 外部命令 的办法来写批处理的话,建议这样:
  1. cmd /v "echo !var!" | findstr xxxxx
  2. ::未开启变量延迟的时候
  3. cmd /v "echo ^!var^!" | findstr xxxxx
  4. ::开启变量延迟的时候
复制代码
可以省却一大堆的兼容性考虑,效率却不会降低

TOP

本帖最后由 apang 于 2014-9-16 23:39 编辑
  1. set /p Input=输入数字:
  2. echo,"%Input%"|findstr /be \"[0-9][0-9]*\" >nul
  3. if %errorlevel%==0 (echo,OK) else echo,NOK
复制代码
用 for 好像也可以
  1. set /p Input=输入数字:
  2. for /f "tokens=1* delims=1234567890" %%a in ("a%Input%a") do (
  3.     if "%%a.%%b" == "a.a" (echo,OK) else echo,NOK
  4. )
  5. pause
复制代码

TOP

你输入这个字符串试试:
123abc
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

返回列表