Board logo

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

作者: 小智BAT    时间: 2014-10-3 16:39     标题: 【已解决】批处理怎样把输入内容限制为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
复制代码

作者: 小智BAT    时间: 2014-10-3 23:01

@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,哪位大神指导下怎么实现?
作者: xxpinqz    时间: 2014-10-4 01:08

正则哦,论坛很多人都很行,除了此楼。
作者: 小智BAT    时间: 2014-10-4 07:49

回复 3# xxpinqz


    难道就没有人能回复下?
作者: CrLf    时间: 2014-10-4 09:01

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

作者: 小智BAT    时间: 2014-10-4 10:01

回复 5# CrLf


    大神,那怎么限制数值不能大于255啊???
作者: yu2n    时间: 2014-10-4 11:17

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


百度/Bing 搜索一下:
  1. findstr IP地址 site:bathome.net
复制代码

作者: DAIC    时间: 2014-10-4 11:50

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

作者: apang    时间: 2014-10-4 23:57

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

作者: CrLf    时间: 2014-10-5 00:10

回复 9# apang


    本想说 js 好像更合适,但看到 inputbox...只好打个地洞逃走了
作者: 小智BAT    时间: 2014-10-5 12:14

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




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