中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][分享]手机归属地查询批处理版
作者:
标题: [原创][分享]手机归属地查询批处理版 上一主题 | 下一主题
singlion
初级用户





积分 25
发帖 12
注册 2007-10-26
状态 离线
『楼 主』:  [原创][分享]手机归属地查询批处理版

有幸得到了手机归属地数据库,有15万3千多条记录,包含最新的151、155、157号码段的归属地数据,2008年9月11日整理完成,于是将它转换成文本文档,用批处理来查询。


附件中总共又三个文件,主文件代码如下
@echo off
title 手机归属地查询 Write by 李国灿  singlion@126.com
color 79
setlocal enabledelayedexpansion
   echo                      ╭──────────╮
   echo        ╭──────┤   手机归属地查询   ├────────╮
   echo        │            ╰──────────╯                │
   echo        │   本程序所带数据库为2008年9月11日整理完成,        │   
   echo        │包含151、155和157号码段。                           │
   echo        │                                                    │
   echo        │使用方法:                                          │
   echo        │    输入手机号码(至少输入前七位),按回车键即可。  │
   echo        │                                                    │
   echo        │注意事项:                                          │
   echo        │                                                    │
   echo        │    1.请勿修改本程序,任何微小的修改都可能导致      │
   echo        │本程序无法正常运行。                                │
   echo        │                                                    │
   echo        │    2.所有数据都存放在文件“List.txt”中,请勿删    │
   echo        │ 除,也不要把它改名,否则将无法使用本程序。         │
   echo        │                                                    │
   echo        │    3.若以后不小心修改了本程序而导致无法正常使      │
   echo        │ 用,你可以自行打开文件“List.txt”用肉眼搜索^^_^^    │
   echo        │                                                    │
   echo        ╰──────────────────────────╯
   echo. & echo        请按任意键继续... & pause>nul

:lookup
cls
echo. & echo. & echo. & echo. & echo. & echo. & echo. & echo. & echo.
set /p mystr=        [请输入手机号]:
if not defined mystr goto :lookup
set count=0
:intercept
set /a count+=1
for /f %%i in ("%count%") do if not "!mystr:~%%i,1!"=="" goto intercept
if %count% lss 7 (
   echo         无效手机号(最少需要手机号的前7位)。
   echo         请按任意键继续...
   pause >nul
   goto :lookup
)
if %count% GEQ 37 (
   echo         无效手机号(不能长于11位)。
   echo         请按任意键继续...
   pause>nul
   goto :lookup
)
cls & echo 正在查询,请稍候...
for /f "tokens=3,4 delims=:." %%i in ("%time%") do (
    set /a sb=%%i
    set /a msb=%%j
)
set where=
set card=
set number=%mystr:~0,7%
for /f "eol=; tokens=2,3,4 delims=," %%i in (list.txt) do (
   if %%i==%number% (
      set where=%%j
      set card=%%k
      goto :result
   )
)
for /f "tokens=3,4 delims=:." %%i in ("%time%") do (
    set /a se=%%i
    set /a mse=%%j
)
if "%mse%" lss "%msb%" (
    set /a mse=%mse%+100
    set /a se=%se%-1
)
if "%se%" lss "%sb%" (
    set /a se=%se%+60
)
set /a s=%se%-%sb%
set /a ms=%mse%-%msb%
cls & echo. & echo  耗时%s%.%ms%秒。没有找到结果。请按任意键继续...
pause>nul
goto :ss
:result
cls
call table.bat %mystr% %where% %card%
echo.
for /f "tokens=3,4 delims=:." %%i in ("%time%") do (
    set /a se=%%i
    set /a mse=%%j
)
if "%mse%" lss "%msb%" (
    set /a mse=%mse%+100
    set /a se=%se%-1
)
if "%se%" lss "%sb%" (
    set /a se=%se%+60
)
set /a s=%se%-%sb%
set /a ms=%mse%-%msb%
echo         查询耗时%s%.%ms%秒。请按任意键继续...
pause>nul
:ss
cls
echo                  ╭────────╮
echo        ╭────┤ 是否继续查询? ├─────╮
echo        │        ╰────────╯          │
echo        │ 输入数字并按回车键:                 │
echo        │                                      │
echo        │    1.继续查询;                      │
echo        │                                      │
echo        │    2.退出程序。                      │
echo        │                                      │
echo        ╰───────────────────╯
set /p select=        
if "%select%"=="1" goto :lookup
goto :eof
pause
文件table.bat代码如下(最好不要更改文件名):
@echo off
if {%1}=={} goto :eof
setlocal enabledelayedexpansion
set blank=
set m=%1
set n=%2
set o=%3
set c=0
:intercept
set /a c+=1
for /f %%i in ("%c%") do if not "!m:~%%i,1!"=="" goto intercept

set d=0
:intercep
set /a d+=1
for /f %%j in ("%d%") do if not "!n:~%%j,1!"=="" goto intercep

set e=0
:interce
set /a e+=1
for /f %%k in ("%e%") do if not "!o:~%%k,1!"=="" goto interce

set /a c=38-%c%
for /l %%x in (1,1,%c%) do set m=!m!%blank%

set /a d=26-%d%*2
for /l %%y in (1,1,%d%) do set n=!n!%blank%

set /a e=26-%e%*2
for /l %%y in (1,1,%e%) do set o=!o!%blank%

echo                      ╭────╮
echo        ╭──────┤查询结果├───────╮
echo        │            ╰────╯              │
echo        │%m%│
echo        ├─────┬─────────────┤
echo        │ 归属地   │%n%│
echo        ├─────┼─────────────┤
echo        │ 卡类型   │%o%│
echo        ╰─────┴─────────────╯
最后是txt格式的数据库,在附件里面。
http://upload.cn-dos.net/img/1168.rar

另,Access数据库
http://upload.cn-dos.net/img/1169.rar

[ Last edited by singlion on 2008-12-6 at 22:07 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 HAT 分数: +2  时间:2008-12-7 18:01


2008-12-6 22:03
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (417493818)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 2 楼』:  

错误:

  Quote:
for /f "eol=; tokens=2,3,4 delims=," %%i in (list.txt) do (
   if %%i==%number% (
      set where=%%j
      set card=%%k
      goto :result
   )
)

数据库名称不对,分隔位置号不对
上面这句效率低,改为:

  Quote:
for /f "eol=; tokens=1,2,3 delims=," %%i in ('findstr "%number%" list.txt') do (
      set where=%%j
      set card=%%k
      goto :result
)





2008-12-7 03:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

手机号码归属地查询批处理单机版
http://www.cn-dos.net/forum/viewthread.php?tid=31250

IP地址地理位置/手机号码归属地查询(网络版)
http://www.cn-dos.net/forum/viewthread.php?tid=31240



2008-12-7 11:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
singlion
初级用户





积分 25
发帖 12
注册 2007-10-26
状态 离线
『第 4 楼』:  

晕,原来早就有了啊,惭愧...

2008-12-7 17:08
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (417493818)  编辑帖子  回复  引用回复

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


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



论坛跳转: