Board logo

标题: [文本处理] [已解决]批处理如何将html网页文件中的链接修改成指定格式 [打印本页]

作者: DDDYJQ1    时间: 2014-4-11 10:51     标题: [已解决]批处理如何将html网页文件中的链接修改成指定格式

本帖最后由 pcl_test 于 2016-8-10 20:53 编辑

求个网页链接的批处理?
某文件夹下有许多文件和子文件夹,内有许多.HTML文件,源文件中有如下一些链接,
不知批处理能否实现按等号后的部分,添加文件路径,有四个字符的,添加文件路径为前两个字符,有五个字符

的,也添加文件路径为前两个字符,有六个文件名的,添加文件路径为前三个字符,等号前有两种格式

原来链接                                                           改后链接
<a href="http://zisea.com/content.asp?uni=279a7">    <a href="../../htm/27/279a7.html>
<a href="http://zisea.com/content.asp?uni=279a9">    <a href="../../htm/27/279a9.html>
<a href="http://zisea.com/content.asp?uni=2B359">    <a href="../../htm/2B/2B359.html>
<a href="http://zisea.com/content.asp?uni=095815">   <a href="../../htm/095/095815.html>
<a href="http://zisea.com/content.asp?uni=095315">   <a href="../../htm/095/095315.html>


<a href="http://zisea.com/zsCONTENT.aSP?uni=21F31">  <a href="../../htm/21/21F31.html>
<a href="http://zisea.com/zsCONTENT.aSP?uni=5C9B">   <a href="../../htm/5C/5C9B.html>
不知表达是否清楚,先谢了,
作者: DAIC    时间: 2014-4-11 12:21

选其中一个html文件,压缩,上传,我好测试。
作者: DDDYJQ1    时间: 2014-4-11 13:54

http://zisea.com/content.asp?uni=050811
这种网页,附件不知为何不能上传,先谢了
作者: DAIC    时间: 2014-4-11 14:04

回复 3# DDDYJQ1


    压缩成rar或者zip
作者: terse    时间: 2014-4-11 14:27

仅对一楼数据写的 不考虑文件其他内容 操作前请先备份原文件
  1. @echo off
  2. set "h=<a href="../../htm/"
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%i in ('dir /b/s/a-d *.html') do (
  5.     (for /f usebackqtokens^=2delims^=^" %%j in ("%%i") do (
  6.         for /f "tokens=2delims==" %%k in ("%%j") do (
  7.             set "str=%%k"
  8.             if "!str:~5!" == "" (
  9.                set "str=!str:~,2!"
  10.             ) else set "str=!str:~,3!"
  11.               echo !h!!str!/%%k.html"^>
  12.         )
  13.     ))>$
  14.     move $ "%%i"
  15. )
  16. pause
复制代码

作者: DDDYJQ1    时间: 2014-4-11 14:38     标题: ,

本帖最后由 DDDYJQ1 于 2014-4-11 14:41 编辑

谢谢各位,5楼的链接是改对了,就是文件内容全没了,要是能把其他内容保留住,找到其中链接并改一下路径就好了
作者: DAIC    时间: 2014-4-11 14:55

回复 6# DDDYJQ1


    传到百度网盘上面试试
作者: apang    时间: 2014-4-11 15:35

  1. @set @n=0;/* & echo off
  2. dir /b/s *.html | cscript -nologo -e:jscript "%~0"
  3. pause & exit /b & rem */
  4. fso = new ActiveXObject('Scripting.FileSystemObject');
  5. while (!WScript.StdIn.AtEndOfStream) {
  6.     f = WScript.StdIn.ReadLine();
  7.     txt = fso.OpenTextFile(f, 1).ReadAll();
  8.     txt = txt.replace(/(.+=").+=(.{4,6})"/img,
  9.         function(s0, s1, s2) {
  10.             m = Math.floor(s2.length / 2);
  11.             s = s1 + '\.\./\.\./htm/';
  12.             s += s2.substr(0, m) + '/' + s2 + '\.html"';
  13.             return s
  14.         }
  15.     );
  16.     fso.OpenTextFile(f, 2, true).Write(txt);
  17. }
复制代码

作者: DDDYJQ1    时间: 2014-4-11 20:13

请各位帮忙看看,10楼做完好像没有动静
作者: apang    时间: 2014-4-11 22:51

回复 11# DDDYJQ1


        以6、7楼为例,需要修改哪几处?修改成什么样子?
顶楼改后链接 <a href="../../htm/27/279a7.html> 后面没有引号是吗?
没有动静应该是把不需要修改的地方也改了
作者: DDDYJQ1    时间: 2014-4-11 23:23

6楼的<A HREF="http://zisea.com/zsCONTENT.ASP?uni=24F27"> 没有改成路径
        <a href="../../htm/24/24F27.html“>
7楼的<A HREF="http://zisea.com/zsCONTENT.ASP?uni=65E1">没有改成路径
        <a href="../../htm/65/65E1.html“>
引号是我原来没表达清楚,
以发上的9876.HTM为例
      原来                                                                                          改为
<a href="http://zisea.com/content.asp?uni=27D5C">          <a href="../../htm/27/27D5C.html">
<a href="http://zisea.com/content.asp?uni=29486">         <a href="../../htm/29/29486.html">
<a href="http://zisea.com/content.asp?uni=29562">         <a href="../../htm/29/29562.html">
<a href="http://zisea.com/content.asp?uni=29569">         <a href="../../htm/29/29569.html">
<a href="http://zisea.com/content.asp?uni=29811">         <a href="../../htm/28/29811.html">
<a href="http://zisea.com/content.asp?uni=071544">         <a href="../../htm/071/071544.html">
<a href="http://zisea.com/content.asp?uni=158950">         <a href="../../htm/158/158950.html">
<a href="http://zisea.com/content.asp?uni=159047">         <a href="../../htm/159/159047.html">
如果等号后有四个字符的,路径也取前两个字符,引号是我原来没表达清楚,批处理执行完,没有看到有改动过的
谢谢了
作者: apang    时间: 2014-4-12 00:04

本帖最后由 apang 于 2014-4-12 12:24 编辑

后缀为htm 而不是顶楼所说html,所以没有修改。改成dir /b/s *.htm 可以兼顾htm和html文件
  1. @set @n=0;/* & echo off
  2. dir /b/s *.htm | cscript -nologo -e:jscript "%~0"
  3. pause & exit /b & rem */
  4. fso = new ActiveXObject('Scripting.FileSystemObject');
  5. while (!WScript.StdIn.AtEndOfStream) {
  6.     f = WScript.StdIn.ReadLine();
  7.     txt = fso.OpenTextFile(f, 1).ReadAll();
  8.     txt = txt.replace(/"http:\/\/.+?uni=([\da-z]{4,6})"/ig,
  9.         function(s0, s1) {
  10.             m = Math.floor(s1.length / 2);
  11.             s = '"../../htm/' + s1.substr(0, m) + '/' + s1 + '.html"';
  12.             return s
  13.         }
  14.     );
  15.     fso.OpenTextFile(f, 2, true).Write(txt);
  16. }
复制代码

作者: DDDYJQ1    时间: 2014-4-12 08:36

对,可以了,谢谢了,太好了




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