[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
22# zm900612
效率我不评论,提取的文字少了n行。。。
***共同提高***

TOP

本帖最后由 zm900612 于 2011-4-29 22:24 编辑

这个vbs部分是照搬别人的...
  1. @echo off&setlocal enabledelayedexpansion
  2. more>1.vbs +16 %0
  3. wscript //nologo 1.vbs "http://bbs.tt365.net.cn/viewthread.php?tid=161145" 1.htm
  4. (for /f "delims=" %%a in ('findstr /rc:"【.*】" 1.htm') do (
  5. set str=%%a【
  6. for /l %%b in (1 1 100) do (
  7. if "!str!" neq " " for /f "tokens=1* delims=】" %%c in ("!str:*【=!") do (
  8. if not defined .%%c (
  9. set .%%c=.
  10. echo %%c
  11. )
  12. )
  13. )
  14. ))>3.txt
  15. pause&exit
  16. iLocal=LCase(Wscript.Arguments(1))
  17. iRemote=LCase(Wscript.Arguments(0))
  18. Set xPost=createObject("Microsoft.XMLHTTP")
  19. xPost.Open "GET",iRemote,0
  20. xPost.Send()
  21. set sGet=createObject("ADODB.Stream")
  22. sGet.Mode=3
  23. sGet.Type=1
  24. sGet.Open()
  25. sGet.Write xPost.ResponseBody
  26. sGet.SaveToFile iLocal,2
复制代码

TOP

楼上的同学走得太绕了

TOP

如果似乎给定的网站,那么TITIE,缓存文件都是固定的。
就可以直接就找到了。

TOP

18# caruko
是不是想得太复杂了。。。
***共同提高***

TOP

试过用IE打开网站,读缓存,但是几个问题很麻烦。
主要问题是IE打开的速度有快有慢,很难知道IE有没有将网页完全下载,除非设置较长的延时,或者等待端口time out(也很久)。

找到对应的缓存文件的方法如下:
1, ping 得到IP。
2,REG方式得到缓存主目录。
3,start web
4,在缓存主目录里,dir /s /b /ad /od /tw 得到最近访问时间的缓存文件夹。
5,netstat -o |findstr "IP"得到“PID”,然后tasklist 取得IE窗口“TITLE”。
6,进入缓存文件夹,findstr /i "<title>.*%Title%" *,查找缓存文件。

还是用NC,WGET要容易的多。
1

评分人数

TOP

16# batman


如果不追求节省资源+效率,可以一边写入文件,然后下一句开始findstr文本。

TOP

15# powerbat
本题最难点在于去除局部重复内容,以我对vbs的了解,它表示压力很大。。。
***共同提高***

TOP

应该放在VBS出题区比较好吧?
而且也没有什么挑战性,会VBS且会xmlhttp、adodb.stream、DOM等常见“第三方”对象的使用,本题迎刃而解,关键是要知道那几个对象。

其实我想问这个问题:如何用vbs从图片中读出验证码(如果有人研究出来了,肯定不能随便公开^@^)

TOP

12# caruko
最好能将所有代码写出来,大家本来就是为了交流嘛。。。

ps:去重有点麻烦哦。。。
***共同提高***

TOP

明确一下第三方的概念
就是初始安装的操作系统中未包含的程序或者数据
不要刻意扩大或者缩小
那对解题没有任何助力

如果有必要
可以使用ASCODE技术将任何程序或数据编码
存储到批处理自身中
运行时再进行解码后调用

对于start 网页的形式
可能打开非IE内核的浏览器
这将影响缓存的确定
不建议使用
天的白色影子

TOP

本帖最后由 caruko 于 2011-4-29 16:53 编辑

发一个取【】内容的代码吧,鉴于【】都在一行,所以没有多做分析。
但就算【】内容分做2行,IF里面加一句判断 !cut:~-1!==$ 就可以了。

抓取网页内容,前面已说了方法,第三方的话更简单,就不写了。
去掉了多余的CALL。

去重只是简单的当前这句跟上一句对比,如果包含在上一句内,就不输出,并且下一句对比时忽略这一句,跟上上句对比。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq delims=" %%i in ("viewthread[2].txt") do (
  3.     set "str=%%~i"
  4.     if not "!str:【=!" == "!str!" (
  5.         set "str=!str:【=" "#!"
  6.         set "str=!str:】=" "$!"
  7.         for %%i in ("!str!") do (
  8.             set "cut=%%~i"
  9.             if "!cut:~0,1!"=="#" if !flag! equ 1 (
  10.                 set "s_new=!cut:~1!"
  11.             ) else (
  12.                 set flag=1
  13.                 set "s_old=!cut:~1!"
  14.                 set "s_new=!cut:~1! "
  15.             )
  16.             for /f "delims=" %%S in ("!s_new!") do if "!s_old:%%S=#!"=="!s_old!" echo %%S&set "s_old=!s_new!"
  17.         )
  18.      )
  19. )
  20. pause>nul&goto :eof
复制代码

TOP

10# Batcher


啊!太口怕了,版主竟然吃人...

TOP

ping、netstat之类的也不是built-in啊
楼主出题的本意不是让大家扣字眼到底哪些是第三方
他不让用wget/curl,你就偏偏用,他还能吃了你?
无非是让大家练练手而已
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

还有一种方法
1, ping bbs.tt365.net.cn 取得目标IP
2, start 网页
3, 取得缓存
4, 根据netstat -o 对比IP 获取 IE的PID,然后taskkill。

TOP

返回列表