无忧启动论坛

标题: 问个问题批处理中怎么判断IP地址是合法的? [打印本页]

作者: lslem    时间: 2008-5-6 08:54
标题: 问个问题批处理中怎么判断IP地址是合法的?
“自己设置”中怎么判断IP地址是合法的这样的对防错误有好处,请各位高手帮帮忙,谢谢!

echo off
cls
echo.
echo 1 自动获取IP 和 DNS
echo 2 IP和DNS 192.168.0.1
echo 3 IP和DNS 192.168.1.1
echo 4 自己设置
echo 5 其他键退出
echo.
set/p i=
if %i%== 5 goto end
if %i%== 4 goto 自己设置
if %i%== 3 goto IP_11
if %i%== 2 goto IP_01
if %i%== 1 goto 自动获取
goto End
:自动获取
echo IP 地址自动获取
netsh interface ip set address name="本地连接" source=dhcp
echo DNS 设置成自动获取...
netsh interface ip set dns name="本地连接" source=dhcp register=PRIMARY
echo WINS 设置成自动获取...
netsh interface ip set wins name="本地连接" source=dhcp  
GOTO End
:IP_01
set IP=192.168.0.2
set zwym=255.255.255.0
set gate_way=192.168.0.1
set dns1=218.74.122.74
set dns2= 218.74.122.75
GOTO Treatment
:IP_11
set IP=192.168.1.2
set zwym=255.255.255.0
set gate_way=192.168.1.1
set dns1=218.74.122.74
set dns2= 218.74.122.75
GOTO Treatment
:自己设置
echo.
echo 请您准确输入
set/p IP=      输入IP 地址(192.168.1.2):
set/p zwym= 子网掩输入网关(255.255.255.0):
set/p gate_way=         输入网关(192.168.1.1):
set/p dns1=    DNS 服务器 (218.74.122.74):
set/p dns2= DNS 备用服务器(218.74.122.75):
echo.
:Treatment
echo 设置 IP 地址 %IP% 子网掩码 %zwym% ...
netsh interface ip set address name="本地连接" source=static addr=%IP% mask=%zwym%
echo 设置网关 %gate_way% ...
netsh interface ip set address name="本地连接" gateway=%gate_way% gwmetric=0
echo 设置主 DNS %dns1% ...
netsh interface ip set dns name="本地连接" source=static addr=%dns1%  register=PRIMARY
echo 设置备份 DNS %dns2% ...
netsh interface ip add dns name="本地连接" addr=%dns2%
echo 设置 wins
netsh interface ip set wins name="本地连接" source=static addr=none
GOTO End
:End
pause ..
作者: namejm    时间: 2008-5-6 12:34
  演示代码如下:
  1. @echo off
  2. :loop
  3. cls
  4. set IP=
  5. set /p IP= 请输入IP:
  6. if not defined IP goto loop
  7. set "IP=%IP:"=%"
  8. echo "%IP%"|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul 2>nul&&goto loop
  9. set IP_tmp=%IP:.= %
  10. for %%i in (%IP_tmp%) do if %%i gtr 255 goto loop
  11. echo %IP% 是合格的IP
  12. pause
  13. goto loop
复制代码


  发现 findstr 的正则功能太弱,居然没有判断某个字符串重复次数的功能,上面的代码在检测IP输入的时候,仍然会有很多漏网之鱼,比如 3 、3.3 、3.3.3 之类的都会认为正确,无语中。

[ 本帖最后由 namejm 于 2008-5-6 06:20 PM 编辑 ]
作者: netwinxp    时间: 2008-5-6 12:43
原帖由 namejm 于 2008-5-6 12:34 发表
  演示代码如下:

@echo off
:loop
cls
set IP=
set /p IP= 请输入IP:
if not defined IP goto loop
set "IP=%IP:"=%"
echo "%IP%"|findstr "^[0-9].*\.[0-9].*\.[0-9].*\.[0-9].*$">nul 2>nul&&g ...

最好防止最低位为0和255,因为0有可能是用来代表整个网段,255有可能是广播地址。
作者: namejm    时间: 2008-5-6 13:25
  我只是给出了0.0.0.0~255.255.255.255这个范围的IP,至于要排除哪些特殊的IP段,就需要楼主给出“地址合法”的具体含义了,做起来应该不难。
作者: lslem    时间: 2008-5-8 09:11
谢谢了!
这样就很好了!
作者: Civiwu    时间: 2008-5-12 10:44
原帖由 namejm 于 2008-5-6 12:34 PM 发表
  演示代码如下:@echo off
:loop
cls
set IP=
set /p IP= 请输入IP:
if not defined IP goto loop
set "IP=%IP:"=%"
echo "%IP%"|findstr "^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$">nul 2>nul&&goto loop ...


1.2也是合法的IP。看来有待完善。
问一下:
set "IP=%IP:"=%"

这条代码啥意思?
作者: CH007    时间: 2008-5-18 10:34
原帖由 netwinxp 于 2008-5-6 12:43 PM 发表

最好防止最低位为0和255,因为0有可能是用来代表整个网段,255有可能是广播地址。



问个小问题 如何将两个批完美的结合在一起
好像这个批是不断循环的
作者: namejm    时间: 2008-5-18 12:05
原帖由 Civiwu 于 2008-5-12 10:44 AM 发表

问一下:
set "IP=%IP:"=%"

这条代码啥意思?

  去掉IP字符串中所有的引号。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3