中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 07:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]如何把IP自动转换成对应IP段? 查看 804 回复 4
楼 主 [已解决]如何把IP自动转换成对应IP段? 发表于 2008-11-01 23:44 ·  中国 云南 曲靖 电信
新手上路
积分 18
发帖 12
注册 2008-09-02 16:14
17年会员
UID 124591
性别 男
状态 离线
@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 ]
2 发表于 2008-11-02 00:43 ·  中国 云南 曲靖 电信
新手上路
积分 18
发帖 12
注册 2008-09-02 16:14
17年会员
UID 124591
性别 男
状态 离线
@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.
3 发表于 2008-11-02 05:40 ·  中国 云南 曲靖 电信
新手上路
积分 18
发帖 12
注册 2008-09-02 16:14
17年会员
UID 124591
性别 男
状态 离线
等人回复的时间找资料看了下,终于搞懂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
4 Re 3楼 发表于 2008-11-02 10:06 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
简化一下你的代码
@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
5 发表于 2008-11-03 23:07 ·  中国 云南 曲靖 电信
新手上路
积分 18
发帖 12
注册 2008-09-02 16:14
17年会员
UID 124591
性别 男
状态 离线
谢谢斑竹,受教了~
论坛跳转: