Board logo

标题: [系统增强] 批处理朋友录 [打印本页]

作者: foxJL    时间: 2007-11-15 20:43     标题: 批处理朋友录

功能2"修改联系人"还在编写之中,写完后会更新.
其它的功能请大家帮帮忙测试...
  1. @echo off&cls
  2. mode con cols=50 lines=26
  3. title 批处理朋友录   %date%
  4. setlocal EnableDelayedExpansion
  5. set binnum=001011001100110001011001
  6. :start
  7. set enterpassword=
  8. if exist config.ini (
  9. for /f "tokens=1,2,3" %%i in (config.ini) do (
  10.     if /i "%%i"=="color" (color %%k)
  11.     if "%%i"=="password" (
  12.         if not "%%k"=="!binnum!" (
  13.             echo.&set /p enterpassword=    请输入密码:
  14.             call :binpassword
  15.             if "!binpassword!"=="%%k" (goto menu) else (
  16.                 echo.&echo.    错误的密码,请重新输入.
  17.                 goto start
  18.                 )
  19.             )
  20.         )
  21.     )
  22. ) else (
  23.     echo color = 07>config.ini
  24.     echo password = !binnum!>>config.ini
  25. )
  26. :menu
  27. cls
  28. echo.&echo.&echo.
  29. echo.               欢迎使用批处理朋友录
  30. echo.&echo.
  31. set list=1.新增联系人,2.修改联系人,3.删除联系人,4.查询联系人,5.浏览联系人,6.朋友录设置,Q.退出通讯录
  32. for %%i in (%list%) do (set/p=                   %%i<nul&echo.&echo.)
  33. echo.
  34. set/p choice=               请输入你操作的选项:
  35. if /i "%choice%"=="Q" exit
  36. for %%i in (1,2,3,4,5,6) do if "%choice%"=="%%i" set choicn=1
  37. if defined choicn (goto choice%choice%) else (
  38.     call :error 错误的输入,请重新输入.
  39.     goto :menu
  40.     )
  41. pause>nul&exit
  42. :choice1
  43. cls
  44. echo.
  45. echo.   增加新的联系人资料.输入/M返回主菜单.
  46. echo.
  47. echo.   请注意:当所有资料输入完毕才会保存,否则放弃.
  48. echo.
  49. echo.   回车则为空,资料中如有多项请用逗号分隔.
  50. echo.
  51. (set item=姓名,生日,手机号码,住宅电话,办公室电话,传真,电子邮件,QQ/MSN,家庭地址,其他)
  52. for %%i in (%item%) do (
  53.     set %%i=
  54.     set/p %%i=   %%i:
  55.     echo.
  56.     if "!%%i!"=="" set %%i=空
  57.     if /i "!%%i!"=="/m" goto menu
  58.     set %%i=!%%i:α=a!
  59.     set %%i=!%%i: = !
  60.     set %%i=!%%i:,=,!
  61.     )
  62. for %%i in (%item%) do (
  63.     set/p (n=%%i:!%%i!α<nul)>>data.yrl
  64. )
  65. echo.>>data.yrl
  66. call :error 资料已经成功录入.
  67. goto choice1
  68. :choice2
  69. call :error 功能2正在完善中.
  70. goto menu
  71. :choice3
  72. cls
  73. echo.&echo.   输入/U撤销上一次删除资料,仅记忆一次.
  74. echo.&set /p delitem=   请输入要删除的联系人姓名(回车返回):
  75. if "%delitem%"=="" goto menu
  76. if /i "%delitem%"=="/u" (
  77.     copy data.yrl_b data.yrl /y >nul 2>nul
  78.     call :error      撤销上一次删除资料.
  79.     goto menu
  80. ) else (
  81.     copy data.yrl data.yrl_b /y >nul 2>nul
  82.     echo.>data.yrl
  83.     findstr . data.yrl_b | findstr /iv "[\< 姓名:!delitem! \>]" >>data.yrl
  84.     call :error      操作完成.
  85.     goto menu
  86. )
  87. :choice4
  88. cls
  89. set num=0
  90. echo.&echo.   关键字可为姓名、生日、手机号码等...
  91. echo.&echo.   资料中有此关键字的联系人均会列出.
  92. echo.&set/p rogatory=   请输入关键字(回车返回):
  93. if "%rogatory%"=="" goto menu
  94. for /f "delims=α tokens=1-10" %%a in ('type data.yrl ^| find "!rogatory!"') do (
  95.     cls
  96.     set/a num+=1
  97.     echo.  关键字 "!rogatory!" ,查找到的第 !num! 个朋友资料.
  98.     for /l %%z in (1,1,25) do (set/p=━<nul)
  99.     echo.
  100.     for %%k in (%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j) do (
  101.         echo.  %%k
  102.         echo.
  103.     )
  104.     for /l %%z in (1,1,25) do (set/p=━<nul)
  105.     set enter=
  106.     set/p enter=  回车显示下一条,其它返回主菜单.
  107.     if not "!enter!"=="" goto menu
  108. )
  109. call :error 所有资料已查找完毕.
  110. goto menu
  111. :choice5
  112. set num=0
  113. for /f "delims=α tokens=1-10" %%a in (data.yrl) do (
  114.     cls
  115.     set/a num+=1
  116.     echo.  正在浏览第 !num! 个朋友资料.按回车键显示下一条.
  117.     for /l %%z in (1,1,25) do (set/p=━<nul)
  118.     echo.
  119.         for %%k in (%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j) do (
  120.             echo.  %%k
  121.             echo.
  122.         )
  123.     for /l %%z in (1,1,25) do (set/p=━<nul)
  124.     set enter=
  125.     set/p enter=  回车显示下一条,其它返回主菜单.
  126.     if not "!enter!"=="" goto menu
  127. )
  128. call :error 所有朋友资料浏览完毕.
  129. goto :menu
  130. :choice6
  131. cls
  132. echo.&echo.&echo.
  133. echo.                批处理朋友录设置
  134. echo.&echo.
  135. set configlist=C.颜色设置,P.密码设置,X.修改密码,D.删除密码,M.返回菜单,Q.退出程序
  136. for %%i in (%configlist%) do (set/p=                   %%i<nul&echo.&echo.)
  137. echo.&echo.
  138. set/p configchoice=              请输入你操作的选项:
  139. if /i "%configchoice%"=="Q" exit
  140. if /i "%configchoice%"=="M" goto menu
  141. for %%i in (C,P,X,D) do if /i "%configchoice%"=="%%i" set configchoicen=1
  142. if defined configchoicen (goto configchoice%configchoice%) else (
  143.     call :error 错误的输入,请重新输入.
  144.     goto menu
  145.     )
  146. :configchoicec
  147.     cls
  148.     echo.&echo.
  149.     echo.  颜色属性由两个十六进制数字指定, 第一个为背景,
  150.     echo.  第二个则为前景。每个数字可以为以下任何值之一:
  151.     echo.
  152.     echo.          0 = 黑色       8 = 灰色
  153.     echo.          1 = 蓝色       9 = 淡蓝色
  154.     echo.          2 = 绿色       A = 淡绿色
  155.     echo.          3 = 湖蓝色     B = 淡浅绿色
  156.     echo.          4 = 红色       C = 淡红色
  157.     echo.          5 = 紫色       D = 淡紫色
  158.     echo.          6 = 黄色       E = 淡黄色
  159.     echo.          7 = 白色       F = 亮白色
  160.     echo.
  161.     echo.    例如: 输入 "fc" 将在亮白色上产生亮红色
  162.     echo.&set /p color=    输入颜色代码:
  163.     color !color!
  164.     for /f "tokens=1,2,3" %%i in (config.ini) do (
  165.             if "%%i"=="password" (
  166.                 set password=%%k
  167.                 )
  168.             )
  169.     echo color = !color!>config.ini
  170.     echo password = !password!>>config.ini
  171.     goto menu
  172. :configchoicep
  173. cls
  174. for /f "tokens=1,2,3" %%i in (config.ini) do (
  175.     if "%%i"=="color" (set color=%%k)
  176.         if "%%i"=="password" (
  177.             if "%%k"=="!binnum!" (
  178.             echo.
  179.             echo.    密码只能为20位以内的纯数字.
  180.             echo.
  181.             set /p strpassword=    输入密码:
  182.             set /p enterpassword=    确认密码:
  183.             if "!strpassword!"=="!enterpassword!" (
  184.                 call :binpassword
  185.                 echo color = !color!>config.ini
  186.                 echo password = !binpassword!>>config.ini
  187.                 call :error 密码设置完毕.
  188.                 goto choice6
  189.                 ) else (
  190.                     call :error 两次输入的密码不相同)
  191.                 ) else (
  192.                 call :error 你已经设置了密码
  193.                 goto choice6
  194.         )
  195.     )
  196. )
  197. goto menu
  198. :configchoicex
  199. for /f "tokens=1,2,3" %%i in (config.ini) do (
  200.     if "%%i"=="color" (set color=%%k)
  201.     if "%%i"=="password" (
  202.         if "%%k"=="!binnum!" (
  203.             call :error 你还没有设置密码
  204.             goto choice6
  205.             ) else (
  206.             cls
  207.             echo.
  208.             set /p enterpassword=    输入原始密码:
  209.             call :binpassword
  210.             if "!binpassword!"=="%%k" (
  211.                 set /p strpassword=    输入新密码:
  212.                 set /p enterpassword=    确认新密码:
  213.                 if "!strpassword!"=="!enterpassword!" (
  214.                     call :binpassword
  215.                     echo color = !color!>config.ini
  216.                     echo password = !binpassword!>>config.ini
  217.                     call :error 密码修改完毕.
  218.                     goto choice6
  219.                 ) else (
  220.                     call :error 两次输入的密码不相同)
  221.             ) else (
  222.                 call :error 原始密码不在确
  223.                 goto choice6
  224.                 )
  225.             )
  226.         )
  227.     )
  228. )
  229. goto menu
  230. :configchoiced
  231. for /f "tokens=1,2,3" %%i in (config.ini) do (
  232.     if "%%i"=="color" (set color=%%k)
  233.         if "%%i"=="password" (
  234.         if "%%k"=="!binnum!" (
  235.             call :error 你还没有设置密码
  236.             goto choice6
  237.             ) else (
  238.             cls
  239.             echo.
  240.             set /p enterpassword=    输入原始密码:
  241.             call :binpassword
  242.             if "!binpassword!"=="%%k" (
  243.                 echo color = !color!>config.ini
  244.                 echo password = !binnum!>>config.ini
  245.                 call :error 密码已删除
  246.                 goto choice6
  247.             ) else (
  248.             call :error 原始密码不正确
  249.             goto choice6
  250.             )
  251.         )
  252.     )
  253. )
  254. goto menu
  255. :error
  256. cls
  257. echo.&echo.&echo.&echo.
  258. echo.               %1<nul
  259. ping -n 2 127.1>nul
  260. goto :eof
  261. ::密码计算
  262. ::加密算法:把数字的每位相加,再乘以99,之后再算出乘积每位的二进制.
  263. ::这种算法相对来说是不可逆的,但是在批处理中却很好破解.
  264. :binpassword
  265. set passwordsum=
  266. set binpassword=
  267. set bin=0001,0010,0011,0100,0101,0110,0111,1000,1001
  268. for /l %%b in (0,1,19) do (set /a passwordsum+=!enterpassword:~%%b,1!>nul 2>nul)
  269. set /a passwordsum*=99
  270. for %%c in (%bin%) do ((set /a num+=1)&(set !num!=%%c)&(set 0=0000))
  271. for /l %%d in (0,1,5) do (set n%%d=!passwordsum:~%%d,1!)
  272. set binpassword=!%n0%!!%n1%!!%n2%!!%n3%!!%n4%!!%n5%!
  273. goto :eof
复制代码

作者: 随风    时间: 2007-11-15 21:13

恭喜,恭喜,大作终于完成!
作者: novaa    时间: 2007-11-15 22:20

大作啊
好好研究
作者: somebody    时间: 2007-11-19 18:43

好长好长的代码...........
太长了,没什么人研究代码...
作者: chsh2016    时间: 2008-4-7 02:39

象这样的好东西不收藏,就可惜了..顶
作者: fml520    时间: 2008-4-15 23:59

拿回去好好研究代码,学习..........
作者: jx1977jx    时间: 2008-4-17 14:01

不错。如果美化一下会很好看。
作者: xc007    时间: 2008-4-23 21:54

没想到BAT还能做出这样的东西?
作者: coffechicken    时间: 2008-4-29 15:39

不错。.收藏了。.我现在用DOS上的网,正好给我用来记电话`
作者: tcl    时间: 2008-5-1 13:52

无与伦比......
作者: listen    时间: 2008-5-1 17:24

试试好不好用....好用的就收藏.....
作者: jmz573515    时间: 2008-8-31 13:52

太棒了,转了.............................
作者: wangwei4106    时间: 2008-8-31 14:06

什么时候跑出来了,说实话,很棒!
作者: 396789141    时间: 2008-9-1 12:03

菜鸟路过...顶一下.
作者: huangzongwu    时间: 2008-9-1 14:43

建议用attrib设置配置文件与数据文件的属性,
退出时设置为系统只读隐藏
登陆时设置为系统可写隐藏




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2