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

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

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

@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,哪位大神指导下怎么实现?

TOP

正则哦,论坛很多人都很行,除了此楼。
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 3# xxpinqz


    难道就没有人能回复下?

TOP

本帖最后由 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 标记把代码部分括起来(选中代码后,单击回复框的 <> 按钮),以便复制。

TOP

回复 5# CrLf


    大神,那怎么限制数值不能大于255啊???

TOP

[已解决]批处理findstr命令正则方式怎样识别IP地址?
http://www.bathome.net/thread-13021-1-1.html


百度/Bing 搜索一下:
  1. findstr IP地址 site:bathome.net
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 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
复制代码

TOP

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

TOP

回复 9# apang


    本想说 js 好像更合适,但看到 inputbox...只好打个地洞逃走了

TOP

回复 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
复制代码
你看看。。。非常感谢大家那么热心的帮忙。

TOP

返回列表