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

[文本处理] 批处理如何提取文本内超长网址?

因为要批量下载一些文件,一个一个的下载非常浪费时间,所以就想做个批处理提取网址批量下载,折磨很久了,遇到了两个问题,希望各位帮个忙,先谢谢了
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>
复制代码

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

TOP

方案一,通过变量替换不断去除 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
复制代码
1

评分人数

    • sky02: 太牛B了!不用第三方工具直接提取,谢谢!技术 + 1

TOP

回复 7# CrLf


    网址里面没有的,那个*是为了不显示外链做的屏蔽

TOP

网址中如果不存在 * 就好办多了

TOP

回复 4# sky02


    哪个特殊符号会影响双引号做列分隔符?

TOP

搜索 geturls 第三方程序 很好用
测试环境:WINDOWS 8 64Bit
如系统环境不同,请自行修改 :)

TOP

回复 3# gawk


    不行,你试试就知道了,里面有很多特殊符号

TOP

用双引号作为分割符

TOP

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

还不如直接用ctrl+f 来查找

TOP

返回列表