[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理代码查询论坛帖子回复点击等数据信息

本帖最后由 taofan712 于 2017-2-18 20:08 编辑
  1. @echo off
  2. title bathome查看器beta1.0
  3. :: 查看bathome.net批处理求助专区帖子查看信息
  4. :: 第三方工具curl,http://www.bathome.net/thread-1761-1-5.html
  5. :: code by taofan712 2017-02-19 CMD@XP
  6. setlocal enabledelayedexpansion
  7. set /p area=请输入查询页面范围数字,数字由空格隔开(如:1 10):
  8. for /f "tokens=1,2 delims= " %%y in ("%area%") do (set ba=%%y & set ea=%%z)
  9. if not exist f:\bat\ md f:\bat\
  10. pushd f:\bat\
  11. echo;下载页面并提取关键词。& set t=%time%
  12. for /l %%a in (%ba% 1 %ea%) do (
  13. set page=%%a
  14. curl -o page!page!.html http://www.bathome.net/forum-5-!page!.html
  15. set "n=0" & set "m=0"
  16.    for /f "skip=2 tokens=5,10,11 delims=<>" %%b in ('find "span id" page!page!.html 2^>nul') do (
  17. set /a n+=1
  18. set qname=%%c
  19. set "qname=http://www.bathome.net/!qname:~8,-1!"
  20. set text!n!=%%b;!qname!;%%d
  21.     )
  22.     for /f "tokens=3,7 delims=<>" %%e in ('find "td class" page!page!.html 2^>nul^|find "strong"') do (
  23. set /a m+=1
  24. set click!m!=%%e;%%f
  25.     )
  26. for /l %%g in (1 1 20) do call echo;%%click%%g%%;%%text%%g%%>>format!page!.txt
  27. )
  28. endlocal
  29. echo;预处理完毕,等待查询。
  30. call :time0 "%t%" "%time%" ok
  31. echo;%ok% & pause>nul
  32. call :sos
  33. :query
  34. set /p input=
  35. if not defined input call :sos
  36. if "%input%"=="1" (
  37. for /f "delims=" %%a in ('dir /b format*.txt') do (
  38. for /f "tokens=1-5 delims=;" %%i in (%%a) do (
  39. if "%%i" equ "0" echo;^<a href=%%l^>【%%k】%%m^</a^>^</br^>
  40. )>>回复数为0的帖子.html
  41. )
  42. start "0回复" 回复数为0的帖子.html
  43. ping -n 2 127.1>nul
  44. del /f /q 回复数为0的帖子.html
  45. )
  46. if "%input%"=="2" (
  47. set /a hotnum=5
  48. set /a hotnum_=0
  49. type format*.txt >temp1.txt
  50. sort  /r temp1.txt>temp2.txt & rem 如何排序?
  51. setlocal enabledelayedexpansion
  52. for /f "tokens=1-5 delims=;" %%i in (temp2.txt) do (
  53. set /a hotnum_+=1 >nul
  54. if "!hotnum_!" gtr "%hotnum%" goto jump
  55. echo;【回复数%%i】^<a href=%%l^>【%%k】%%m^</a^>^</br^>
  56. )>>高回复帖子.html
  57. :jump
  58. endlocal
  59. start "hot回复" 高回复帖子.html
  60. ping -n 2 127.1>nul
  61. del /f /q 高回复帖子.html
  62. del /f /q temp?.txt
  63. )
  64. if /i "%input%"=="cls" (cls & goto query )
  65. if /i "%input%"=="sos" call :sos
  66. if /i "%input%"=="what a **" (
  67. echo;I'm so sorry but would you like give me some advise
  68. set /p sorry=yes/no:
  69. echo;%sorry%|find /i "yes" && start "advise" "www.bathome.net/thread-43222-1-1.html"||del /f /q /s f:\bat\*.*
  70. panse&exit /b
  71. )
  72. if /i "%input:~0,4%"=="open" (
  73. for /f "tokens=2 delims= " %%i in ("%input%") do (
  74. set /a 1%%i1 2>nul&&set legal=T||set "legal="
  75. if not defined legal echo;open命令错误(范例:open 5)& pause&goto query
  76. type format%%i.txt
  77. pause&goto query
  78. )
  79. )
  80. if /i "%input:~0,3=%"=="del" (
  81. for /f "tokens=2 delims= " %%i in ("%input%") do (
  82. set /a 1%%i1 2>nul&&set legal=T||set "legal="
  83. if not defined legal echo;del命令错误(范例:del 2)&pause&goto query
  84. del /f /q format%%i.txt
  85. pause&goto query
  86. )
  87. )
  88. rem if /i "input:~0,4"=="show" (
  89. rem for /f "tokens=  delims= " %%i in ("%input%") do (
  90. rem
  91. rem 【我】【要】【崩】【溃】【了】
  92. rem
  93. rem )
  94. rem )
  95. pause&goto query
  96. :time0  计算时间差 (封装)
  97. @echo off&setlocal&set /a n=0&rem code 随风 @bbs.bathome.net
  98. set "n="&set "m="&set "f="&set "s="
  99. for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do (
  100. set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100
  101. set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100)
  102. set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100
  103. set "ok=用时:小时 %f% 分钟 %m% 秒 %n% 毫秒,按任意键继续"
  104. endlocal&set %~3=%ok:-=%&goto :eof
  105. :sos
  106. cls &echo; &echo;
  107. echo;________________________________________________________________________
  108. echo;
  109. echo; 查询语法:
  110. echo;
  111. echo; sos 打开帮助信息。   cls 清屏     
  112. echo; open [...] 打开某页 ;del [...]删除某页;what a ** 退出并删除全部临时文件^^_^^
  113. echo; show:查找并显示    report:查找并生成html文件
  114. echo; [show ^| report]  [class ^|  key ^| click ] [geq ^| equ ^| leq] [...] [only] [...]
  115. echo; class-问题分类; key-回复数;click-点击数;   only-限定查找页面
  116. echo; 如:show  class equ 文件操作 ,将查找并显示关于“文件操作”的帖子。
  117. echo; 如:report  click geq 200 , 将查找“点击量”大于等于“30”的帖子,并生成html文件供点击直达。
  118. echo; 如:show key leq 2 only 5 ,将查找并显示第“5”页中“回复数”小于等于“2”的帖子。
  119. echo; 按1快捷查询bat求助专区回复数为0的帖子。
  120. echo; 按2快捷查询bat求助专区回复数最高的前五个帖子。
  121. echo;_________________________________________________________________________
  122. goto :eof
复制代码

本帖最后由 taofan712 于 2017-2-18 18:00 编辑

诚如几个前辈所说,这个东西写出来实际意义不大,但本着命令练习与迫切渴望写出东西来满足自己的心态,写出了大半截。
写到这里有几个问题想寻求指导:
第一个问题:如何用findstr的语法准确找到下面的红色数字?我没试出来,于是用了find|find的办法,但还是想请教一下。
<label>&nbsp;</label>
<em>[<a href="forumdisplay.php?fid=5&amp;filter=type&amp;typeid=8">注册表类</a>]</em><span id="thread_43209"><a href="thread-43209-1-1.html">批处理添加注册表后继续执行后面的代码</a></span>
</th>
<td class="author">
<cite>
<a href="space.php?uid=78960">lchir</a>
</cite>
<em>2017-2-17</em>
</td>
<td class="nums"><strong>3</strong>/<em>125</em></td>

下面这段是format1.txt里的内容。
第二个问题:为何第一行会出错?
第三个问题:怎么更好的获得行首数字的排序?我原来是合并所有txt然后用sort排序
512;716451;/a;http://www.bathome.net/~8,-1;
1;31;其他;http://www.bathome.net/thread-43221-1-1.html;求个bat脚本
0;28;文件操作;http://www.bathome.net/thread-43219-1-1.html;求助,批处理  通过txt文档里的文件夹的名称查找子文件夹
0;44;文件操作;http://www.bathome.net/thread-43217-1-1.html;如何修改以下脚本实现删除文件名中包含指定日期串的文件
3;125;注册表类;http://www.bathome.net/thread-43209-1-1.html;批处理添加注册表后继续执行后面的代码
1;84;文本处理;http://www.bathome.net/thread-43213-1-1.html;SED命令替换多个字符为#
5;654;文件操作;http://www.bathome.net/thread-42102-1-1.html;批处理如何提取nslookup域名解析结果中的ip地址并按指定格式输出
16;318;网络连接;http://www.bathome.net/thread-43184-1-1.html;求助批处理findstr获取电脑MAC和IP地址
第四个问题:我引用随风的时间函数,出来的时间不对 ?
第五个问题留给我自己,将1楼里面【我】【崩】【溃】【了】的代码,补全。

TOP

返回列表