无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6187|回复: 7
打印 上一主题 下一主题

问个问题批处理中怎么判断IP地址是合法的?

[复制链接]
跳转到指定楼层
1#
发表于 2008-5-6 08:54:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
“自己设置”中怎么判断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 ..
8#
发表于 2008-5-18 12:05:23 | 只看该作者
原帖由 Civiwu 于 2008-5-12 10:44 AM 发表

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

这条代码啥意思?

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

使用道具 举报

7#
发表于 2008-5-18 10:34:22 | 只看该作者
原帖由 netwinxp 于 2008-5-6 12:43 PM 发表

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



问个小问题 如何将两个批完美的结合在一起
好像这个批是不断循环的
回复

使用道具 举报

6#
发表于 2008-5-12 10:44:29 | 只看该作者
原帖由 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:"=%"

这条代码啥意思?
回复

使用道具 举报

5#
 楼主| 发表于 2008-5-8 09:11:01 | 只看该作者
谢谢了!
这样就很好了!
回复

使用道具 举报

4#
发表于 2008-5-6 13:25:20 | 只看该作者
  我只是给出了0.0.0.0~255.255.255.255这个范围的IP,至于要排除哪些特殊的IP段,就需要楼主给出“地址合法”的具体含义了,做起来应该不难。
回复

使用道具 举报

3#
发表于 2008-5-6 12:43:22 | 只看该作者
原帖由 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有可能是广播地址。
回复

使用道具 举报

2#
发表于 2008-5-6 12:34:54 | 只看该作者
  演示代码如下:
  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 编辑 ]

评分

参与人数 1无忧币 +10 收起 理由
netwinxp + 10 我很赞同

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-29 07:50

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表