中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结][超级感谢netbenton和其他老师的帮助]IP类型转换
« [1] [2] »
作者:
标题: [已结][超级感谢netbenton和其他老师的帮助]IP类型转换 上一主题 | 下一主题
pooronce
中级用户





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

不错不错,这个算法精简多了
建议右边部分取9位,这样尽量减少算法使用的时间

2009-1-4 11:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 17 楼』:  看看这段如何??

@echo off&setlocal enabledelayedexpansion
set hex=0123456789ABCDEF
for /f "usebackq tokens=1,2*" %%i in ("ip.txt") do (
   if not "%%i"=="" set var=&set h=&set s=%%i&call:lp
   set/a ha=0x!var:~-8,2!,hb=0x!var:~-6,2!,hc=0x!var:~-4,2!,hd=0x!var:~-2,2!
   set str1=!ha!.!hb!.!hc!.!hd!
   if not "%%j"=="" set var=&set h=&set s=%%j&call:lp
   set/a ha=0x!var:~-8,2!,hb=0x!var:~-6,2!,hc=0x!var:~-4,2!,hd=0x!var:~-2,2!
   set str2=!ha!.!hb!.!hc!.!hd!
   >>ip1.txt echo !str1!      !str2!     %%k
  )
start "" "ip1.txt"
pause&goto :eof
:lp
    set/a m=s/16,n=s%%16
    set n=!hex:~%n%,1!
    set h=%n%%h%
    if %m% geq 16 set s=%m%&goto lp
    set m=!hex:~%m%,1!
    set var=0%m%%h%


看看  这样会不会 有什么问题呢?

[ Last edited by cz1314 on 2009-1-4 at 14:12 ]

2009-1-4 14:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

有没有问题,你自己测试一下不就知道了么?



2009-1-4 14:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 19 楼』:  

我也来练习一下,
@echo off
for /f "tokens=1,2,3" %%i in (test.txt) do call :conv %%i&call :conv %%j&echo %%k
goto :EOF
:conv
set/a ip=%1,ip1_=0
if %ip% lss 0 set/a ip=ip+2147483647+1,ip1_+=128
set/a ip1=ip/16777216,ip-=ip1*16777216,ip1+=ip1_
set/a ip2=ip/65536,ip-=ip2*65536
set/a ip3=ip/256,ip-=ip3*256
set /p =IP,%1        %ip1%.%ip2%.%ip3%.%ip%                <nul


   此帖被 +2 点积分    点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-6 02:07


2009-1-5 14:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 20 楼』:  

哇,厉害!



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-6 02:07
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
terse
银牌会员





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

19楼上改进
@echo off&setlocal enabledelayedexpansion
cd.>ip1.txt
for /f "tokens=1,2,3" %%i in (ip.txt) do (
set n=0
call:lp %%i %%j
>>ip1.txt echo !str1!            !str2!   %%k
)
pause&goto :eof
:lp
set/a ip=%1,n+=1
if %ip% lss 0 (set/a ip-=2147483648,_ip=128)else set _ip=0
set/a ip1=ip/16777216,ip2=ip%%16777216/65536,ip3=ip%%65536/256,ip4=ip%%256,ip1+=_ip
set "str%n%=%ip1%.%ip2%.%ip3%.%ip4%"
if not "%2" == "" call:lp %2


   此帖被 +2 点积分    点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-7 02:51




简单!简单!再简单!
2009-1-6 12:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 22 楼』:  

位移版,似乎更简单点
@echo off
for /f "tokens=1,2,3" %%i in (test.txt)do call:conv %%i&call:conv %%j&echo %%k
goto:EOF
:conv
for %%i in (24 16 8 0)do set/a ip%%i=%1^>^>%%i^&255
set /p=IP,%1        %ip24%.%ip16%.%ip8%.%ip0%                <nul
[ Last edited by linee on 2009-1-6 at 21:06 ]

   此帖被 +17 点积分          点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-7 02:52
评分人:【 everest79 分数: +15  时间:2009-1-8 06:29


2009-1-6 20:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 23 楼』:  

22楼的应该是绝版了
偶学习了

[ Last edited by netbenton on 2009-1-7 at 02:54 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-7 02:53
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 24 楼』:  

22 楼 好象没有输出大批文本啊。。。

2009-1-8 00:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 25 楼』:  根据22楼的稍作改动,这样就合要求了

@echo off
>IP_out.txt cd.
for /f "tokens=1,2,3" %%i in (ip.txt)do call:conv %%i&call:conv %%j&echo    %%k >>IP_out.txt
type IP_out.txt
pause
goto:EOF
:conv
for %%i in (24 16 8 0)do set/a ip%%i=%1^>^>%%i^&255
set /p= %ip24%.%ip16%.%ip8%.%ip0%        <nul >>IP_out.txt

[ Last edited by netbenton on 2009-1-8 at 01:12 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-8 01:06
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 26 楼』:  



  Quote:
Originally posted by netbenton at 2009-1-8 01:06:
@echo off
>IP_out.txt cd.
for /f "tokens=1,2,3" %%i in (ip.txt)do call:conv %%i&call:conv %%j&echo    %%k >>IP_out.txt
type IP_out.txt
pause
goto:EOF
:conv
for %%i ...

22# 25# 似乎都对超过4294967295 的数字不能转换了.

这是32bit机器上的上限.

2009-1-15 21:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 27 楼』:  

并且, 对于超出范围的数据,比如:

50331648        1033418400        US
4000000001        50332671        US
3549476416        50332927        US
4000000000        50333695        US
4007483643        50333951        US
11111111111       11111111110     cn
2123369536        50334719                US
4294967295        4294967294      us
11111111111       11111111110     cn


输出结果会取用上一个有效数据的值.

2009-1-15 21:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
exzzz
初级用户

游手好闲 + 无所事事 ..



积分 194
发帖 167
注册 2007-4-30
状态 离线
『第 28 楼』:  

牛人啊!顶一个,最近几天忙着培训,没时间来学习了,呵呵。

2009-1-15 22:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 29 楼』:  

超过32位的可以分成两截来处理,如15楼的方法,
只是不知道超过32位的ip地址有什么用?


3.0.0.0        61.152.182.160        US
238.107.40.1        3.0.3.255        US
211.144.182.64        3.0.4.255        US
238.107.40.0        3.0.7.255        US
238.221.88.251        3.0.8.255        US
2.150.70.25.199        2.150.70.25.198        cn
126.144.12.64        3.0.11.255        US
255.255.255.255        255.255.255.254        us
2.150.70.25.199        2.150.70.25.198        cn



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-1-16 00:30
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 30 楼』:  

netbenton
     

非常感谢!也感谢所有老师的帮助!

2009-1-16 01:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: