中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助][没人能帮我吗]求将零散ip段整合的批处理【急】
作者:
标题: [求助][没人能帮我吗]求将零散ip段整合的批处理【急】 上一主题 | 下一主题
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『楼 主』:  [求助][没人能帮我吗]求将零散ip段整合的批处理【急】

从纯真数据库上去一段ip如下

-------------以下是取样-------------------------------------
58.60.232.202   58.60.232.203   广东省深圳市龙岗区 电信
58.60.232.204   58.60.232.204   广东省深圳市龙岗区 龙平东路宇宙村网吧
58.60.232.205   58.60.232.255   广东省深圳市龙岗区 电信
58.60.233.0     58.60.239.255   广东省深圳市 电信
58.60.240.0     58.60.243.255   广东省深圳市龙岗区 电信
58.60.244.0     58.61.3.255     广东省深圳市 电信
58.61.4.0       58.61.4.255     广东省深圳市罗湖区 电信
58.61.5.0       58.61.5.255     广东省深圳市龙岗区 电信
58.61.6.0       58.61.7.255     广东省深圳市 电信
58.61.8.0       58.61.8.255     广东省深圳市福田区 电信
58.61.9.0       58.61.19.255    广东省深圳市 电信
58.61.20.0      58.61.20.255    广东省深圳市宝安区 电信
58.62.37.0      58.62.40.255    广东省广州市 电信
58.62.41.0      58.62.41.255    广东省广州市白云区 电信
58.62.42.0      58.62.42.135    广东省广州市 大学城
58.63.104.0     58.63.105.255   广东省广州市天河区 电信
58.63.106.0     58.63.106.255   广东省广州市白云区 电信
58.63.107.0     58.63.107.255   广东省广州市天河区 电信
---------------------------------------------------------
59.40.0.0       59.51.0.0       广东省汕头市 (潮南区/潮阳区)电信ADSL
61.20.0.0       61.28.0.0       广东省广州市白云区 电信
-------------以上是取样---------------------------
--------------------------------------------------
我希望把上面的ip地址整理成下面这样:

58.60.0.0       58.64.0.0

59.40.0.0       59.45.0.0
59.45.0.0       59.50.0.0
59.50.0.0       59.51.0.0
61.20.0.0       61.25.0.0
61.25.0.0       61.28.0.0
---------------------------------------------------------


简单解释下 :

把ip分为  A B C D 4个段  即 A.B.C.D
一  首先比较 A段:
1   如果A段相同则继续比较B段,如果上下2段ip的B 段差 小于(等于)1,则合并这2段。
    例如:
    --------------以下是取样----------------------------------
    58.60.244.0     58.61.3.255     广东省深圳市 电信
    58.61.4.0       58.61.4.255     广东省深圳市罗湖区 电信
    --------------以上是取样----------------------------------
    将整理成: 58.60.244.0 58.61.4.255
   
2   如果A段不同,则继续选择下面的ip进行A段的比较。
    依次类推!

二  比较同一行 B 段ip
1   如果同一行的 B 段 ip 差小于(等于)5,则继续取下一行进行比较。

2   如果同一行的 B 段 ip 差大于 5 ,则以5为单位进行划分。

    例如:
    --------------以下是取样----------------------------------
    59.40.0.0       59.51.0.0       广东省汕头市 (潮南区/潮阳区)电信ADSL
    61.20.0.0       61.28.0.0       广东省广州市白云区 电信
    --------------以上是取样----------------------------------
    将整理成:
    59.40.0.0       59.45.0.0
    59.45.0.0       59.50.0.0
    59.50.0.0       59.51.0.0
    61.20.0.0       61.25.0.0
    61.25.0.0       61.28.0.0
   
希望高高手赐教如何写这样的批处理命令,

以上 一、二 2个部分 可以分为2个批处理分开处理,如果能合成一个那就更完美了

小弟跪求!!
                                                  QQ:1919134

[ Last edited by cz1314 on 2007-11-12 at 11:14 PM ]

2007-11-12 02:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





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

这样做是不是想文件小些呢?还是别的作用?
下面是我几天前写的对纯真数据库搜索IP的批处理
不过太慢了  最后还是放弃了
@echo off&setlocal enabledelayedexpansion&color 1E
title IP地址查询
mode con: cols=55 lines=15
:start
cls
echo.&echo.
echo                请输入所要查询的IP
for %%a in (ip ipa aip bip cip ip1 ip2 ip3 ip4) do set %%a=
set /p ipa=
if not defined ipa exit
cls
for /f "tokens=1,2,3,4 delims=. " %%a in ('echo !ipa!') do (
        set ip1=%%a
        set ip2=%%b
        set ip3=%%c
        set ip4=%%d
)
        if !ip1! GTR 255 goto start
        if !ip2! GTR 255 goto start
        if !ip3! GTR 255 goto start
        if !ip4! GTR 255 goto start
set ip=!ipa!
set ip=!ip:.=\.!
for /f "tokens=1,2*" %%i in ('findstr "\<!ip!\>" ip.txt') do (
     set aip=%%i
     set bip=%%j
     set cip=%%k
)
        if "!cip!"=="" goto ip2
        goto ok
:ip2
if "!ip4!"=="0" goto ip3
     set /a ip4-=1
set ip=!ip1!.!ip2!.!ip3!.!ip4!
set ip=!ip:.=\.!
for /f "tokens=1,2*" %%i in ('findstr "\<!ip!\>" ip.txt') do (
     set aip=%%i
     set bip=%%j
     set cip=%%k
)
     if "!cip!"=="" goto ip2
goto ok
:ip3
if "!ip3!"=="0" if "!cip!"=="" goto ip4
     set /a ip3-=1
set ip=!ip1!.!ip2!.!ip3!
set ip=!ip:.=\.!
for /f "tokens=1,2*" %%i in ('findstr "\<!ip!\>" ip.txt') do (
     set aip=%%i
     set bip=%%j
     set cip=%%k
)
    if "!cip!"==""  goto ip3
goto ok
:ip4
if "!ip2!"=="0" goto ip5
     set /a ip3-=1
set ip=!ip1!.!ip2!
set ip=!ip:.=\.!
for /f "tokens=1,2*" %%i in ('findstr "\<!ip!\>" ip.txt') do (
     set aip=%%i
     set bip=%%j
     set cip=%%k
)
     if "!cip!"=="" goto ip4
goto ok
:ip5
set ip=!ip1!
set ip=!ip:.=\.!
for /f "tokens=1,2*" %%i in ('findstr "\<!ip!\>" ip.txt') do (
     set aip=%%i
     set bip=%%j
     set cip=%%k
)
:ok
if "!cip!"=="" goto nip
echo    你查询的IP: !ipa!
echo    所属IP段: !aip!-!bip!
echo    IP所在地: !cip!
pause
goto start
:nip
echo.&echo.
echo    你查询的IP: !ipa!
echo.
echo    很抱歉!没找到你要查询的IP
echo.
pause
goto start  
回得这么快

[ Last edited by terse on 2007-11-12 at 02:35 AM ]



简单!简单!再简单!
2007-11-12 02:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cz1314
初级用户





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

文件小是一个方面,
主要是提高使用效率,节约时间!

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





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

我对比较这块 不熟,不知道写这样的批处理算不算有难度。
我毕竟是大菜鸟!!

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





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

请问朋友 你这个批处理能其到什么作用啊》》

你这个主要是起查询作用的吧!

我需要的是 能通过比较  对已搜索到的ip段进行整理!

看你写的批处理,我想你应该能帮帮我的。

   谢谢了!!

[ Last edited by cz1314 on 2007-11-12 at 02:51 AM ]

2007-11-12 02:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: