找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25299|回复: 9

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

[复制链接]
发表于 2012-5-21 13:11:49 | 显示全部楼层 |阅读模式
因为要批量下载一些文件,一个一个的下载非常浪费时间,所以就想做个批处理提取网址批量下载,折磨很久了,遇到了两个问题,希望各位帮个忙,先谢谢了
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>
复制代码
发表于 2012-5-21 19:55:55 | 显示全部楼层
很难,即便能实现。代码也会很复杂

还不如直接用ctrl+f 来查找
发表于 2012-5-21 21:39:04 | 显示全部楼层
用双引号作为分割符
 楼主| 发表于 2012-5-22 16:51:49 | 显示全部楼层
回复 3# gawk


    不行,你试试就知道了,里面有很多特殊符号
发表于 2012-5-22 17:03:57 | 显示全部楼层
搜索 geturls 第三方程序 很好用
发表于 2012-5-22 17:22:38 | 显示全部楼层
回复 4# sky02


    哪个特殊符号会影响双引号做列分隔符?
发表于 2012-5-22 17:28:29 | 显示全部楼层
网址中如果不存在 * 就好办多了
 楼主| 发表于 2012-5-22 17:40:47 | 显示全部楼层
回复 7# CrLf


    网址里面没有的,那个*是为了不显示外链做的屏蔽
发表于 2012-5-22 18:29:23 | 显示全部楼层
方案一,通过变量替换不断去除 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技术 +1 收起 理由
sky02 + 1 太牛B了!不用第三方工具直接提取,谢谢!

查看全部评分

 楼主| 发表于 2012-5-23 15:08:13 | 显示全部楼层
第一个问题解决了,第二个问题貌似比较棘手...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:00 , Processed in 0.021081 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表