Board logo

标题: [文件操作] [己解决]IP格式识别的批处理该如何编写? [打印本页]

作者: keshun    时间: 2010-10-11 23:28     标题: [己解决]IP格式识别的批处理该如何编写?

:ip
set /p ip=地址:
if /i "%ip%"=="IP格式代码" goto a
goto ip
:a


请教高手,这个IP格式代码该如何编写??

要求识别格式:*.*.*.*
*表示:0-255

[ 本帖最后由 keshun 于 2010-10-13 02:58 编辑 ]
作者: 随风    时间: 2010-10-12 00:19

000 也算吗?
如:001.000.12.0
作者: keshun    时间: 2010-10-12 00:29     标题: 回复 2楼 的帖子

也算,只要能识别*.*.*.*格式就行,数字要求不高,太致范围就行
作者: broly    时间: 2010-10-12 08:37     标题: 标题

用findstr的正则表达式和管道命令符可以实现。手机上网,不方便写代码

[ 本帖最后由 broly 于 2010-10-12 08:39 编辑 ]
作者: broly    时间: 2010-10-12 15:24

写了一个。如果你的IP含有@#等这些符号的,就行不通了。反正可以过滤掉英文字母。暂时还没有想到更好的
  1. @echo off
  2. :ip
  3. set /p ip=地址:
  4. for /f "tokens=1-3,* delims=." %%i in ("%ip%") do (
  5.   if %%i geq 0 (
  6.     if %%i leq 255 (
  7.       if %%j geq 0 (
  8.         if %%j leq 255 (
  9.           if %%k geq 0 (
  10.             if %%k leq 255 (
  11.               if %%l geq 0 (
  12.                 if %%l leq 255 ( (echo %%l | find ".">nul 2>nul) || echo 此为IP格式 &goto a)
  13.          )
  14.         )
  15.        )
  16.       )
  17.      )
  18.     )
  19.   )
  20. )
  21. goto ip
  22. :a
复制代码

作者: keshun    时间: 2010-10-12 21:12     标题: 回复 5楼 的帖子

地址:121.11
此为IP格式
请按任意键继续. . .

在此感谢你的回复,只是当输入不完整的IP时也显示正确,可见判断格式上还存有缺陷,望解决。

要求能判断格式: *.*.*.* 也就是四段数字三个分隔符
作者: cjiabing    时间: 2010-10-12 21:38

先说清楚用来干啥的?
作者: keshun    时间: 2010-10-12 22:11     标题: 回复 7楼 的帖子

是用来设IP时,根据手动输入,来判断IP输入是否正确,只要判断IP格式是否正确就行,这代码同时可以判断子网掩码、网关、DNS
作者: cjiabing    时间: 2010-10-12 22:22     标题: 回复 8楼 的帖子

判断IP?
据我对IP的了解,一个合格的IP应当:
1、符合这个格式:000.000.000.000,三个数字一组,共四组。
2、小组之间使用点号分隔。
3、每组数字最大只能是255?因此封顶是:255.255.255.255。
4、但也有不是三个数字一组的,如:192.168.1.1。
因此,判断只能是:
四组数字;每组最大三位数255,最小一位数0;每组数使用点号分隔。
你的题目要求符合吗?
作者: 随风    时间: 2010-10-12 22:22     标题: 回复 4楼 的帖子

期待4楼的代码
作者: 随风    时间: 2010-10-12 22:32

  1. @echo off
  2. :start
  3. setlocal enabledelayedexpansion
  4. set /p ip= 请输入ip &cls
  5. set "s=[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
  6. echo %ip%|findstr /be "%s%" >nul||set flag=a
  7. set n=%ip:.= %
  8. for %%a in (%n%) do (
  9.    set /a var=1%%a 2>nul
  10.    if !var! gtr 1255 set flag=a
  11. )
  12. if defined flag echo  输入错误&endlocal&goto start
  13. echo 正确ip %ip%
  14. pause
复制代码

作者: cjiabing    时间: 2010-10-12 22:33     标题: 回复 10楼 的帖子

随风兄,我发现你那个代码屡试不爽,我又在你目前班门弄斧一下:
  1. @echo off
  2. set /p id= ID: &cls
  3. echo.%id%|findstr /be "[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]"||echo 输入错误
  4. pause
复制代码

作者: cjiabing    时间: 2010-10-12 22:34     标题: 回复 11楼 的帖子

晕,你动作真快啊!~
作者: 随风    时间: 2010-10-12 22:34     标题: 回复 12楼 的帖子

这样局限了只能输入3位数字,还是无法满足楼主要求,如: 1.2.3.4
作者: cjiabing    时间: 2010-10-12 22:38     标题: 回复 14楼 的帖子

呵呵,我只是给他个提示,我不想动手写啊,我写的都是“长篇大论!”,想学习你们“精悍短小”的代码!~
作者: keshun    时间: 2010-10-12 23:11     标题: 回复 15楼 的帖子

如果不要求数字0-255,只要求是四组数字用“.”分隔的格式就确定为正确,那代码又该怎么编写。
作者: broly    时间: 2010-10-12 23:42     标题: 回复 11楼 的帖子

还是超版厉害,一下就写好了
作者: keshun    时间: 2010-10-12 23:42     标题: 回复 11楼 的帖子

感谢版主,随风,我测过11楼的代码,可以达到比较好的效果,但还存有一个问题,第四组数字不输入时“*.*.*.”也确定为正常

请输入ip: 12.11.2
输入错误
请输入ip: 12.11.2.
正确ip 12.11.2.
请按任意键继续. . .

[ 本帖最后由 keshun 于 2010-10-12 23:50 编辑 ]
作者: powerbat    时间: 2010-10-12 23:55

将11楼代码中的set "s=[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" 改为
set "s=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
作者: Batcher    时间: 2010-10-13 13:00     标题: 回复 8楼 的帖子

遗憾的是,你给出的条件不足以判断用户输入的IP是否合法。
作者: keshun    时间: 2010-10-13 13:36     标题: 回复 20楼 的帖子

是有点美中不足,但也勉强可以,也想请教高手帮忙优化下代码



  1. :输入
  2. :重设1
  3. set 标号=1
  4. set 格式输入=
  5. set /p 格式输入= 输入IP 地址:
  6. goto 识别格式
  7. :回设1
  8. echo.
  9. :重设2
  10. set 地址=%格式%
  11. set 标号=2
  12. set 格式输入=
  13. set /p 格式输入= 输入子网掩码:
  14. goto 识别格式
  15. :回设2
  16. echo.
  17. :重设3
  18. set 子网=%格式%
  19. set 标号=3
  20. set 格式输入=
  21. set /p 格式输入= 输入默认网关:
  22. goto 识别格式
  23. :回设3
  24. echo.
  25. :重设4
  26. set 网关=%格式%
  27. set 标号=4
  28. set 格式输入=
  29. set /p 格式输入= 输入首选DNS:
  30. goto 识别格式
  31. :回设4
  32. echo.
  33. :重设5
  34. set 首选=%格式%
  35. set 标号=5
  36. set 格式输入=
  37. set /p 格式输入= 输入备用DNS:
  38. goto 识别格式
  39. :回设5
  40. set 备用=%格式%
  41. goto 跳过
  42. :识别格式
  43. setlocal enabledelayedexpansion
  44. set 格式=%格式输入%
  45. set "s=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
  46. echo %格式%|findstr /be "%s%" >nul||set flag=a
  47. set n=%格式:.= %
  48. for %%a in (%n%) do (
  49.    set /a var=1%%a 2>nul
  50.    if !var! gtr 1255 set flag=a
  51. )
  52. if defined flag echo  错误,请重新输入&endlocal&goto 重设%标号%
  53. goto 回设%标号%
  54. :跳过
  55. cls
  56. echo                  ╭────────────────────╮
  57. echo                  │                                        │
  58. echo                  │     确  认  信  息  是  否  准  确     │
  59. echo                  │                                        │
  60. echo                  ╰────────────────────╯
  61. echo.
  62. echo.
  63. echo   【1】IP 地址: %地址%
  64. echo.
  65. echo   【2】子网掩码:%子网%
  66. echo.
  67. echo   【3】默认网关:%网关%
  68. echo.
  69. echo   【4】首选 DNS:%首选%
  70. echo.
  71. echo   【5】备用 DNS:%备用%
  72. echo.
  73. :确认
  74. echo.
  75. echo  确认无误:按[ y ]继续,确认有误:按[ n ]重设
  76. echo.
  77. set 确认=
  78. set /p 确认= 请输入确认结果:
  79. if /i "%确认%"=="y" goto 设置
  80. if /i "%确认%"=="n" goto 输入
  81. goto 确认
复制代码

[ 本帖最后由 keshun 于 2010-10-13 14:37 编辑 ]
作者: hfg1977    时间: 2010-10-13 15:08

  1. ::================= 判断IP地址是否正确 ========================
  2. :isIP addr
  3. set IP_addr=%~1&set "IP_ture=1"
  4. echo %IP_addr%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul 2>nul||(set "IP_ture=0"&goto:eof)
  5. for %%a in (%IP_addr:.=,%) do (if %%a gtr 255 set "IP_ture=0")
  6. goto:eof
  7. ::=========== end = 判断IP地址是否正确 =========================
复制代码





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