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

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

[复制链接]
发表于 2014-9-16 18:52:27 | 显示全部楼层 |阅读模式
利用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
复制代码
发表于 2014-9-16 19:05:11 | 显示全部楼层
你输入大于号或者小于号试试
发表于 2014-9-16 19:07:01 | 显示全部楼层
你输入这个字符串试试:
123abc
发表于 2014-9-16 21:19:51 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2014-9-17 05:25:49 | 显示全部楼层
回复 4# apang


假如 %m% 含双引号呢?
如果非要用 echo var | 外部命令 的办法来写批处理的话,建议这样:
  1. cmd /v "echo !var!" | findstr xxxxx
  2. ::未开启变量延迟的时候

  3. cmd /v "echo ^!var^!" | findstr xxxxx
  4. ::开启变量延迟的时候
复制代码
可以省却一大堆的兼容性考虑,效率却不会降低
 楼主| 发表于 2014-9-17 11:11:19 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2014-9-17 11:27:12 | 显示全部楼层
回复 4# apang


    非常感谢~findstr开关不一样,学习了。for循环的那个,如果是输入的字母,如abc,那没有数字,delims是怎么来分的呢。
发表于 2014-9-17 11:32:26 | 显示全部楼层
回复 6# Linuxer


你输入这个试试:
123
发表于 2014-9-17 11:39:59 | 显示全部楼层
本帖最后由 apang 于 2014-9-17 12:32 编辑

回复 5# CrLf


    奇数个双引号的情况貌似不太容易碰到?个人认为
 楼主| 发表于 2014-9-17 12:34:02 | 显示全部楼层
回复 5# CrLf


    这个不知道咋用的,,,我带入进代码不生效。
 楼主| 发表于 2014-9-17 12:36:42 | 显示全部楼层
回复 8# Batcher


    看来还是不完美,,想不出了,除了用/BE之外,还能怎么判断。
批处理里边怎么使用正则表达式呢?比如想判断8位数字。\d{8}这个怎么在bat里实现呢。。测试老会也不对。
发表于 2014-9-17 12:39:24 | 显示全部楼层
回复 11# Linuxer


    连续写8个[0-9]
发表于 2014-9-17 12:42:06 | 显示全部楼层
回复 7# Linuxer


    如果变量 Input 值为 abc,a%input%a即aabca,%%a为aabca,%%b为空
如果变量 Input 值为 123,那么a%input%a即为a123a,%%a为a,%%b为a
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 02:36 , Processed in 0.016178 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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