中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-11 06:43
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结][超级感谢netbenton和其他老师的帮助]IP类型转换
可打印版本  2,794 / 29
第16楼 pooronce 发表于 2009-01-04 11:02
中级用户 发帖 250 积分 484
不错不错,这个算法精简多了
建议右边部分取9位,这样尽量减少算法使用的时间
第17楼 cz1314 发表于 2009-01-04 14:09
初级用户 发帖 43 积分 64
看看这段如何??
@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 ]
第18楼 HAT 发表于 2009-01-04 14:48
版主 发帖 5,017 积分 9,023
Re 17楼
有没有问题,你自己测试一下不就知道了么?
第19楼 linee 发表于 2009-01-05 14:47
初级用户 发帖 49 积分 94
我也来练习一下,
第20楼 netbenton 发表于 2009-01-06 02:07
银牌会员 发帖 752 积分 1,916 来自 广西
哇,厉害!
第21楼 terse 发表于 2009-01-06 12:05
银牌会员 发帖 946 积分 2,404
19楼上改进
第22楼 linee 发表于 2009-01-06 20:57
初级用户 发帖 49 积分 94
位移版,似乎更简单点


[ Last edited by linee on 2009-1-6 at 21:06 ]
第23楼 netbenton 发表于 2009-01-07 02:53
银牌会员 发帖 752 积分 1,916 来自 广西
22楼的应该是绝版了
偶学习了

[ Last edited by netbenton on 2009-1-7 at 02:54 ]
第24楼 cz1314 发表于 2009-01-08 00:34
初级用户 发帖 43 积分 64
22 楼 好象没有输出大批文本啊。。。
第25楼 netbenton 发表于 2009-01-08 01:06
银牌会员 发帖 752 积分 1,916 来自 广西
根据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 ]
第26楼 scriptor 发表于 2009-01-15 21:27
银牌会员 发帖 555 积分 1,187
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机器上的上限.
第27楼 scriptor 发表于 2009-01-15 21:30
银牌会员 发帖 555 积分 1,187
并且, 对于超出范围的数据,比如:


输出结果会取用上一个有效数据的值.
第28楼 exzzz 发表于 2009-01-15 22:31
初级用户 发帖 167 积分 194
牛人啊!顶一个,最近几天忙着培训,没时间来学习了,呵呵。
第29楼 netbenton 发表于 2009-01-16 00:30
银牌会员 发帖 752 积分 1,916 来自 广西
超过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
第30楼 cz1314 发表于 2009-01-16 01:37
初级用户 发帖 43 积分 64
netbenton


非常感谢!也感谢所有老师的帮助!
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023