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

[系统相关] 【已解决】批处理怎样把输入内容限制为IP格式?

[复制链接]
发表于 2014-10-3 16:39:59 | 显示全部楼层 |阅读模式
本帖最后由 小智BAT 于 2014-10-5 12:31 编辑

如题,最近喜欢上BAT,在写个批处理缺不会了。
set /p input=请输入IP地址(如:192.168.1.100):
要求:在输入内容限制为IP格式的判断。求大神给个源码,万分感谢。。。不能输入字母、文字等,最好包括一下特殊符号也不能输入,但“.”(点)肯定要有的。

再次感谢。。。。
  1. @echo off
  2. set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
  3. set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."
  4. :reip
  5. set /p str2=请输入字符:
  6. echo %str2%|findstr "%pattern_包含%"|findstr /v "%pattern_排除%"|findstr /v "[0-9][0-9][0-9][0-9] [3-9][0-9][0-9] 2[6][0-9] 25[6-9]" && echo %str2% || echo 这不是IP地址请重新输入。&goto reip
  7. pause>nul
复制代码
 楼主| 发表于 2014-10-3 23:01:22 | 显示全部楼层
@echo off
set str0=0123456789
set str1=^.
:reip
set /p str2=请输入字符:
echo %str2%|findstr "[%str0%][%str1%]">nul||(echo 亲,这不是IP地址格式,请重新输入!&goto :reip)
echo %str2%
pause>nul

限制只能输入数字,但没限制数字的长度。IP地址最大是:255.255.255.255,哪位大神指导下怎么实现?
发表于 2014-10-4 01:08:05 | 显示全部楼层
正则哦,论坛很多人都很行,除了此楼。
 楼主| 发表于 2014-10-4 07:49:26 | 显示全部楼层
回复 3# xxpinqz


    难道就没有人能回复下?
发表于 2014-10-4 09:01:38 | 显示全部楼层
本帖最后由 CrLf 于 2014-10-4 09:08 编辑

举个栗子:
  1. set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
  2. set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."
  3. echo 12.1.44.6|findstr "%pattern_包含%"|findstr /v "%pattern_排除%" && echo 正确 || echo
  4. 错误
复制代码
另,代码请加 code:
请使用 code 标记把代码部分括起来(选中代码后,单击回复框的 <> 按钮),以便复制。
 楼主| 发表于 2014-10-4 10:01:14 | 显示全部楼层
回复 5# CrLf


    大神,那怎么限制数值不能大于255啊???
发表于 2014-10-4 11:17:09 | 显示全部楼层
[已解决]批处理findstr命令正则方式怎样识别IP地址?
http://www.bathome.net/thread-13021-1-1.html


百度/Bing 搜索一下:
  1. findstr IP地址 site:bathome.net
复制代码
发表于 2014-10-4 11:50:16 | 显示全部楼层
回复 6# 小智BAT
  1. @echo off
  2. set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
  3. set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."

  4. :reip
  5. set "input=192.168.0.123"
  6. set /p "input=请输入IP(直接回车默认是 192.168.0.123):"
  7. echo %input%|findstr "%pattern_包含%"|findstr /v "%pattern_排除%">nul || (echo 亲,这不是IP地址格式,请重新输入!&goto :reip)
  8. for /f "tokens=1-4 delims=." %%a in ("%input%") do (
  9.     if %%a leq 255 (
  10.         if %%b leq 255 (
  11.             if %%c leq 255 (
  12.                 if %%d leq 255 (
  13.                     goto :result
  14.                 )
  15.             )
  16.         )
  17.     )
  18. )
  19. echo 亲,这不是IP地址格式,请重新输入!&goto :reip

  20. :result
  21. echo,%input%
  22. pause
复制代码
发表于 2014-10-4 23:57:09 | 显示全部楼层
本帖最后由 apang 于 2014-10-9 10:13 编辑

这种事交给 vbs 好像要合适一点
  1. Input = InputBox("输入IP:", , "192.168.1.1")
  2. If IsEmpty(Input) Then WScript.Quit
  3. Set re = New RegExp
  4. re.Pattern = "^(?:(?:[1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){4}$"
  5. MsgBox re.Test(Input & ".")
复制代码
发表于 2014-10-5 00:10:28 | 显示全部楼层
回复 9# apang


    本想说 js 好像更合适,但看到 inputbox...只好打个地洞逃走了
 楼主| 发表于 2014-10-5 12:14:16 | 显示全部楼层
回复 10# CrLf


    重要能实现就好。。。谢谢你的栗子,我根据的栗子和人家的栗子做了一个。
  1. @echo off
  2. set "pattern_包含=^[^.]*\.[^.]*\.[^.]*\.[^.]*$"
  3. set "pattern_排除=[^.][^.][^.][^.] [^0-9.] \.\."
  4. :reip
  5. set /p str2=请输入字符:
  6. echo %str2%|findstr "%pattern_包含%"|findstr /v "%pattern_排除%"|findstr /v "[0-9][0-9][0-9][0-9] [3-9][0-9][0-9] 2[6][0-9] 25[6-9]" && echo %str2% || echo 这不是IP地址请重新输入。&goto reip
  7. pause>nul
复制代码
你看看。。。非常感谢大家那么热心的帮忙。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 22:01 , Processed in 0.034981 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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