Board logo

标题: [文本处理] 批处理如何提取文本内超长网址? [打印本页]

作者: sky02    时间: 2012-5-21 13:11     标题: 批处理如何提取文本内超长网址?

因为要批量下载一些文件,一个一个的下载非常浪费时间,所以就想做个批处理提取网址批量下载,折磨很久了,遇到了两个问题,希望各位帮个忙,先谢谢了
1.要如何才能够获取文本内的超长网址,用FOR截取,总是不知用哪个符号作为分割符,
2.如何判断第二行是否包含 普通下载 这个字符串,如果不包含,就取消提取第一行网址
  1. <table id="1124" class="ec_pp_f" border="0" cellpadding="0" cellspacing="0"><tr><td class="f EC_PP"><a id="aw2" onmousedown="return c({'fm':'pp','title':this.innerHTML,'url':this.href,'p1':1124})" href="http://www.***.net/video.php?url=S_TK00aWdwhxvN417g6SfAdRZ1-3WRC8qwT7GrYy_VIVri0xjROLC2tYjLNR-mGP61ne66B3ThdrYOC3hX1J9iroTgEN7KtqyDGNCIdr0A91iz-uhVk--E3B4L83.7Y_aAlWP7sC6uBhCs2N9h9mo3tUPB6.U1Y10ZDq_thvEPaV8_LiEIil0Zfq_thvEPxvznEKqasedrSlssKGUHYznWR0I1Y0u1dsTvwYn0KdpHdBmy-bIfKspyfqnW60mv-b5Hc1r0KVIjYs0AVG5H00TMfqQHD0ug9s5fK-pyfq0AdGujYs0AFG5H00Uynqn0KkTA-b5Hc30Z7WpyfqnWcv0ZFMIA7M5H00mLFW5HcdnjRv" target="_blank"><font size="3"><font color=#CC0000>internet</font>第一课font color=#CC0000>四川</font>;</font><br>
  2. <font size=-1 color="#008000">普通下载</font><font size=-1> - <a href="http://www.****.net/?id=1" target="_blank" class="m">四川电信</a></font></td></tr></table><br>
复制代码

作者: poter    时间: 2012-5-21 19:55

很难,即便能实现。代码也会很复杂

还不如直接用ctrl+f 来查找
作者: gawk    时间: 2012-5-21 21:39

用双引号作为分割符
作者: sky02    时间: 2012-5-22 16:51

回复 3# gawk


    不行,你试试就知道了,里面有很多特殊符号
作者: andyrave    时间: 2012-5-22 17:03

搜索 geturls 第三方程序 很好用
作者: gawk    时间: 2012-5-22 17:22

回复 4# sky02


    哪个特殊符号会影响双引号做列分隔符?
作者: CrLf    时间: 2012-5-22 17:28

网址中如果不存在 * 就好办多了
作者: sky02    时间: 2012-5-22 17:40

回复 7# CrLf


    网址里面没有的,那个*是为了不显示外链做的屏蔽
作者: CrLf    时间: 2012-5-22 18:29

方案一,通过变量替换不断去除 href 关键词之前的内容,再以双引号为分隔符取地址,但需要预设固定的循环次数(此处为10),处理含有较多 href 的行时可能会漏:
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /ic:" href" a.txt') do (
  3. endlocal
  4. set str=%%a
  5. setlocal enabledelayedexpansion
  6. for %%b in (1 1 10) do (
  7. set str=!str:* herf=!
  8. for /f tokens^=2-3delims^=^": %%c in ("!str!") do (
  9. endlocal
  10. if /i %%c==http echo http:%%d
  11. setlocal enabledelayedexpansion
  12. )
  13. )
  14. )
  15. pause
复制代码
方案二,利用 = 为 for 默认分隔符的特性,将每行内容扔进 for 中直接循环并取地址,但不兼容网址含 * 的情况:
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /ic:" href" a.txt') do (
  3. set str=%%a
  4. setlocal enabledelayedexpansion
  5. for %%b in (!str:?^=\!) do (
  6. endlocal
  7. for /f "tokens=1* delims=:" %%c in ("%%~b") do (
  8. if /i %%c==http (
  9. set url=http:%%d
  10. setlocal enabledelayedexpansion
  11. echo !url:\=?!
  12. )
  13. )
  14. )
  15. )
  16. pause
复制代码

作者: sky02    时间: 2012-5-23 15:08

第一个问题解决了,第二个问题貌似比较棘手...




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