中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 批处理能判断相同的IP吗? 上一主题 | 下一主题
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『楼 主』:  批处理能判断相同的IP吗?

在网上经常要遇到ADSL换IP的情况,我希望能实现这样的功能:用批处理断网,重连,显示当前IP,比较当前IP与前一次IP是否相同,相同的话再断网重拨...直到换个新的IP

我只会做前面的,大虾指导下,谢谢!!
rasdial /disconnect
sleep 7000
rasdial adsl 123456@adsl 123456
sleep 150
ipconfig
sleep 6000

2008-3-11 13:07
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 2 楼』:  

如果有cygwin的支持,引进sed命令的话还是比较容易的:
for /f "tokens=1 delims=" %%i in ('ipconfig ^| sed -n -e '/adsl/{n^;n^;n^;s/.*\: //^;p}'') do set adip=%%i
如果仅用cmd命令的话,麻烦一点,这样:
for /f "tokens=2 delims=:" %i in ('ipconfig ^| findstr "Address" ^| findstr /v "192.168"') do @set adip=%i
192.168是过滤本地IP,如果没本地可以去掉,有其它本地ip呢,就再追加过滤进去。
这样会多抓一个空格在IP地址的前面,不过不影响使用,或者再去掉空格也行。
当然一定要抓准的话呢,略改一下"tokens=14 delims=: "就行了,不过这个14就不一定能在你机器上通用了,得自己确认是不是第14个位置了。

IP地址抓到了变量里,剩下的的对比并确认是否需要重拨,相信你自己也能完成了。

2008-3-11 13:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by pooronce at 2008-3-11 13:45:
如果有cygwin的支持,引进sed命令的话还是比较容易的:
[code]
for /f "tokens=1 delims=" %%i in ('ipconfig ^| sed -n -e '/adsl/{n^;n^;n^;s/.*\: //^;p}'') do set adip=%%i
...

感些pooronce大虾!!我很菜,我再学学...

2008-3-11 14:10
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 4 楼』:  

很多不懂的,有哪位虾虾能不厌烦的写下实现这一功能的完整代码,不尽感谢!!

2008-3-11 15:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 5 楼』:  

你先到cmd下ipconfig一下,让我看看显示的情况如何

2008-3-11 15:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by pooronce at 2008-3-11 15:35:
你先到cmd下ipconfig一下,让我看看显示的情况如何

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>rasdial /disconnect
命令已完成。

正在连接到 VNET_PPPOE...
正在验证用户名及密码...
正在网络上注册您的计算机...
已连接 VNET_PPPOE。
命令已完成。

C:\Documents and Settings\Administrator>ipconfig

Windows IP Configuration


Ethernet adapter 本地连接:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 192.168.0.2
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :

PPP adapter Vnet_PPPoE:

        Connection-specific DNS Suffix  . :
        IP Address. . . . . . . . . . . . : 125.78.56.190
        Subnet Mask . . . . . . . . . . . : 255.255.255.255
        Default Gateway . . . . . . . . . : 125.78.56.190

2008-3-11 15:50
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 7 楼』:  

试试吧:
@echo off
::抓取老IP
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "Address" ^| findstr /v "192.168"') do @set oldip=%%i
echo 现在的IP地址是%oldip%,确认要重拨以进行IP更换吗?输入y回车继续
set /P goon=
if not pc%goon%==pcy goto :eof

::开始循环处
:start

rasdial adsl /DISCONNECT
ping 127.0.0.1 -n 2 >nul

echo 重拨ing...
rasdial adsl ad4148414 pspsljljhaha
for /f "tokens=2 delims=:" %%i in ('ipconfig ^| findstr "Address" ^| findstr /v "192.168"') do @set newip=%%i
if %newip%==%oldip% (
        echo 新拨得IP与老IP一致,重来!
        goto :start
        )

echo 换IP成功,现在的IP是:%newip%
echo 按任意键退出
set oldip=
set newip=
set goon=
pause&exit
[ Last edited by pooronce on 2008-3-11 at 05:30 PM ]

2008-3-11 16:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
abcd
银牌会员





积分 1436
发帖 739
注册 2007-10-11
状态 离线
『第 8 楼』:  

if not pc%goon%=pcy goto :eof
少=

2008-3-11 17:16
查看资料  发短消息 网志  OICQ (470237592)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 9 楼』:  

@echo off
for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|find /i "Address"') do set ip1=%%i
:aaa
rasdial /disconnect&&rasdial adsl 123456@adsl 123456
for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|find /i "Address"') do set ip2=%%i
if "%ip1%"=="%ip2%" goto aaa
pause



简单!简单!再简单!
2008-3-11 17:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by abcd at 2008-3-11 05:16 PM:
if not pc%goon%=pcy goto :eof
少=

哦,
没注意~

[ Last edited by pooronce on 2008-3-11 at 05:31 PM ]

2008-3-11 17:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by terse at 2008-3-11 17:19:
@echo off
for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|find /i "Address"') do set ip1=%%i
:aaa
rasdial /disconnect&&rasdial adsl 123456@adsl 123456
for /f &quo ...

谢谢大虾,已经实现了!!!! :))
谢谢pooronce!!!谢谢回复的兄弟,以上帮助我的朋友,喜欢QQ号的话,我将会拿个QQ相赠...
加下延时,得到最终的代码:
@echo off
for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|find /i "Address"') do set ip1=%%i
echo 现在的IP%ip1%
:aaa
rasdial /disconnect
sleep 5000
rasdial adsl 123456@qzadsl 123456
for /f "tokens=2 delims=:" %%i in ('ipconfig /all^|find /i "Address"') do set ip2=%%i
echo 重拨后的IP%ip2%
if "%ip1%"=="%ip2%" goto aaa
pause

2008-3-11 17:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: