Board logo

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

作者: Linuxer    时间: 2014-9-16 18:52     标题: 【分享】利用批处理命令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
复制代码

作者: Batcher    时间: 2014-9-16 19:05

你输入大于号或者小于号试试
作者: Batcher    时间: 2014-9-16 19:07

你输入这个字符串试试:
123abc
作者: apang    时间: 2014-9-16 21:19

本帖最后由 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
复制代码

作者: CrLf    时间: 2014-9-17 05:25

回复 4# apang


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

本帖最后由 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
复制代码

作者: Linuxer    时间: 2014-9-17 11:27

回复 4# apang


    非常感谢~findstr开关不一样,学习了。for循环的那个,如果是输入的字母,如abc,那没有数字,delims是怎么来分的呢。
作者: Batcher    时间: 2014-9-17 11:32

回复 6# Linuxer


你输入这个试试:
123
作者: apang    时间: 2014-9-17 11:39

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

回复 5# CrLf


    奇数个双引号的情况貌似不太容易碰到?个人认为
作者: Linuxer    时间: 2014-9-17 12:34

回复 5# CrLf


    这个不知道咋用的,,,我带入进代码不生效。
作者: Linuxer    时间: 2014-9-17 12:36

回复 8# Batcher


    看来还是不完美,,想不出了,除了用/BE之外,还能怎么判断。
批处理里边怎么使用正则表达式呢?比如想判断8位数字。\d{8}这个怎么在bat里实现呢。。测试老会也不对。
作者: Batcher    时间: 2014-9-17 12:39

回复 11# Linuxer


    连续写8个[0-9]
作者: apang    时间: 2014-9-17 12:42

回复 7# Linuxer


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2