标题: [文件操作] [己解决]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含有@#等这些符号的,就行不通了。反正可以过滤掉英文字母。暂时还没有想到更好的
- @echo off
- :ip
- set /p ip=地址:
- for /f "tokens=1-3,* delims=." %%i in ("%ip%") do (
- if %%i geq 0 (
- if %%i leq 255 (
- if %%j geq 0 (
- if %%j leq 255 (
- if %%k geq 0 (
- if %%k leq 255 (
- if %%l geq 0 (
- if %%l leq 255 ( (echo %%l | find ".">nul 2>nul) || echo 此为IP格式 &goto a)
- )
- )
- )
- )
- )
- )
- )
- )
- goto ip
- :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
- @echo off
- :start
- setlocal enabledelayedexpansion
- set /p ip= 请输入ip &cls
- set "s=[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"
- echo %ip%|findstr /be "%s%" >nul||set flag=a
- set n=%ip:.= %
- for %%a in (%n%) do (
- set /a var=1%%a 2>nul
- if !var! gtr 1255 set flag=a
- )
- if defined flag echo 输入错误&endlocal&goto start
- echo 正确ip %ip%
- pause
复制代码
作者: cjiabing 时间: 2010-10-12 22:33 标题: 回复 10楼 的帖子
随风兄,我发现你那个代码屡试不爽,我又在你目前班门弄斧一下:- @echo off
- set /p id= ID: &cls
- 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 输入错误
- 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
- set 标号=1
- set 格式输入=
- set /p 格式输入= 输入IP 地址:
- goto 识别格式
-
- :回设1
- echo.
- :重设2
- set 地址=%格式%
- set 标号=2
- set 格式输入=
- set /p 格式输入= 输入子网掩码:
- goto 识别格式
-
- :回设2
- echo.
- :重设3
- set 子网=%格式%
- set 标号=3
- set 格式输入=
- set /p 格式输入= 输入默认网关:
- goto 识别格式
-
- :回设3
- echo.
- :重设4
- set 网关=%格式%
- set 标号=4
- set 格式输入=
- set /p 格式输入= 输入首选DNS:
- goto 识别格式
-
- :回设4
- echo.
- :重设5
- set 首选=%格式%
- set 标号=5
- set 格式输入=
- set /p 格式输入= 输入备用DNS:
- goto 识别格式
-
- :回设5
- set 备用=%格式%
- goto 跳过
-
- :识别格式
- setlocal enabledelayedexpansion
- set 格式=%格式输入%
- set "s=[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
- echo %格式%|findstr /be "%s%" >nul||set flag=a
- set n=%格式:.= %
- for %%a in (%n%) do (
- set /a var=1%%a 2>nul
- if !var! gtr 1255 set flag=a
- )
- if defined flag echo 错误,请重新输入&endlocal&goto 重设%标号%
- goto 回设%标号%
-
- :跳过
- cls
- echo ╭────────────────────╮
- echo │ │
- echo │ 确 认 信 息 是 否 准 确 │
- echo │ │
- echo ╰────────────────────╯
- echo.
- echo.
- echo 【1】IP 地址: %地址%
- echo.
- echo 【2】子网掩码:%子网%
- echo.
- echo 【3】默认网关:%网关%
- echo.
- echo 【4】首选 DNS:%首选%
- echo.
- echo 【5】备用 DNS:%备用%
- echo.
- :确认
- echo.
- echo 确认无误:按[ y ]继续,确认有误:按[ n ]重设
- echo.
- set 确认=
- set /p 确认= 请输入确认结果:
- if /i "%确认%"=="y" goto 设置
- if /i "%确认%"=="n" goto 输入
- goto 确认
-
复制代码
[ 本帖最后由 keshun 于 2010-10-13 14:37 编辑 ]
作者: hfg1977 时间: 2010-10-13 15:08
- ::================= 判断IP地址是否正确 ========================
- :isIP addr
- set IP_addr=%~1&set "IP_ture=1"
- echo %IP_addr%|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul 2>nul||(set "IP_ture=0"&goto:eof)
- for %%a in (%IP_addr:.=,%) do (if %%a gtr 255 set "IP_ture=0")
- goto:eof
- ::=========== end = 判断IP地址是否正确 =========================
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |