中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何把IP自动转换成对应IP段?
作者:
标题: [已解决]如何把IP自动转换成对应IP段? 上一主题 | 下一主题
kele9988
新手上路





积分 18
发帖 12
注册 2008-9-2
状态 离线
『楼 主』:  [已解决]如何把IP自动转换成对应IP段?

@echo off
for /f "tokens=15" %%i in ('ipconfig ^| find /i "ip address"') do set ip=%%i
echo 你的外网IP为:%ip%
pause

上面这段代码是自动获取本机外网IP并显示,请问大虾,如何在获取本机IP后,自动转换成相应的IP段,并写入文本。比如:
本机IP为 218.21.21.21,如何自动转换成218.21.0.0 218.21.255.255IP段格式。

[ Last edited by kele9988 on 2008-11-2 at 05:23 ]

2008-11-1 23:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kele9988
新手上路





积分 18
发帖 12
注册 2008-9-2
状态 离线
『第 2 楼』:  

@echo off
for /f "tokens=15" %%A in ('ipconfig ^| find /i "ip address"') do set IP=%%A
set IP=%IP:~0,-9%
@echo %ip%.0.0 %ip%.255.255>ip.txt
exit

刚看了资料凑了这段代码,可以完成将本机IP转换成IP段,但只有满足IP最后2段都是3位的情况才能用,比如IP必须是*.*.111.222,如果是*.*.11.22或者*.*.11.222就不行,要把set IP=%IP:~0,-9% 中的9改成7或者8.

2008-11-2 00:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
kele9988
新手上路





积分 18
发帖 12
注册 2008-9-2
状态 离线
『第 3 楼』:  

等人回复的时间找资料看了下,终于搞懂for语句的用法,凑出代码了

@echo off
for /f "tokens=15" %%A in ('ipconfig ^| find /i "ip address"') do set IP=%%A
@echo %ip%>ip.txt
for /f "tokens=1,2 delims=." %%i in (ip.txt) do echo %%i.%%j.0.0 %%i.%%j.255.255>ip.txt
exit



上面这个获取本机IP的方法,如果是拨号上网,获取的一般就是外网IP,如果没联网获取的就是网卡绑定的内网IP,要确保获取外网IP,那就用下面这段代码,从别处看来的。

@echo off
echo On Error Resume next >checkip.vbs
echo Set oDOM=WScript.GetObject("http://www.ip138.com/ip2city.asp") >>checkip.vbs
echo Do Until oDOM.readyState="complete" >>checkip.vbs
echo WScript.sleep 100 >>checkip.vbs
echo Loop >>checkip.vbs
echo str = Split(oDOM.documentElement.outerText,"[") >>checkip.vbs
echo Set oDOM=nothing >>checkip.vbs
echo ip = Split(str(1),"]") >>checkip.vbs
echo Set FSO = CreateObject("Scripting.FileSystemObject") >>checkip.vbs
echo Set SCF = FSO.OpenTextFile(FSO.BuildPath(FSO.GetSpecialFolder(0),"ip.txt"),2,True) >>checkip.vbs
echo SCF.Write(ip(0)) >>checkip.vbs
echo SCF.Close >>checkip.vbs
echo fso.DeleteFile(WScript.ScriptName) >>checkip.vbs
checkip.vbs
set/p n=<%windir%\ip.txt&cls

@echo %n%>ip.txt
for /f "tokens=1,2 delims=." %%i in (ip.txt) do echo %%i.%%j.0.0 %%i.%%j.255.255>ip.txt
exit

2008-11-2 05:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  Re 3楼

简化一下你的代码
@echo off
for /f "tokens=15" %%A in ('ipconfig^|find /i "ip address"') do set IP=%%A
for /f "tokens=1,2 delims=." %%i in ("%IP%") do echo %%i.%%j.0.0 %%i.%%j.255.255>ip.txt




2008-11-2 10:06
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kele9988
新手上路





积分 18
发帖 12
注册 2008-9-2
状态 离线
『第 5 楼』:  

谢谢斑竹,受教了~

2008-11-3 23:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: