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

[文本处理] 如何提取网页中的ed2k链接并将链接中的文件大小转换后添加到链接中的文件名前

本帖最后由 pcl_test 于 2017-5-1 01:43 编辑

网页里面有很多ed2k结构是这样的,直接保存下来了:
  1. <a href="ed2k://|file|Donkey%20Kong%2064%20(U)%20(Kiosk%20Demo)%20[b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|h=ZQBPPEFMIO5SJ6PMJWAJVDCWB4QUFP4J|/">Donkey Kong 64 (U) (Kiosk Demo) [b2]</a><br />
复制代码
这样的连接不能在网页上复制下来,而这样的就能直接复制下来了保存为txt了,下面的纯数字25165824就是容量大小
  1. ed2k://|file|Donkey Kong 64 (U) (Kiosk Demo) [b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|/
复制代码
我需要的是把网页上面的ed2k长连接提取出来变成ed2k短连接,提取保存为txt文件后进行替换,并且为ed2k的文件名前面添加[容量],小数点后面保留1位,最终效果:
  1. ed2k://|file|[25.1MB]Donkey Kong 64 (U) (Kiosk Demo) [b2].z64|25165824|3CF27324022C858374E0E9A7ADADF996|/
复制代码
这个是我在论坛搜索的相关,只能把这个连接添加个容量,但是怎么把网页里面的先提取出来再进行替换呢?
  1. //&cls&dir /b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. function reStr(file){
  3.     var f = fso.opentextfile(file, 1);
  4.     str = f.ReadAll()
  5.     .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dKB\]).+\|)([0-9]{1,3})([0-9])([0-9]{2}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4KB]$2$3$4$5')
  6.     .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dMB\]).+\|)([0-9]{1,3})([0-9])([0-9]{5}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4MB]$2$3$4$5')
  7.     .replace(/(ed2k:\/\/\|file\|)((?!\[\d+\.\dGB\]).+\|)([0-9]{1,3})([0-9])([0-9]{7}\|[a-z0-9A-Z]{32}\|\/)/g, '$1[$3.$4GB]$2$3$4$5');
  8.     f.Close();
  9.     var f = fso.opentextfile(file, 2);
  10.     f.Write(str);
  11. }
  12. var fso = new ActiveXObject('Scripting.FileSystemObject');
  13. while(!WScript.StdIn.AtEndOfStream)reStr(WScript.StdIn.ReadLine());
复制代码
我需要的是先把网页里面的ed2k提取出来保存,然后再替换,一个bat一步到位,这个只能替换txt,而网页一般是html和htm的

本帖最后由 pcl_test 于 2017-5-2 18:54 编辑
  1. @echo off
  2. powershell ^
  3.     Function FormatSize($s){^
  4.         if($s -lt 1024){^
  5.             return $s.toString('f1')+'B';^
  6.         }elseif($s -lt 1048576){^
  7.             return ($s/1kb).toString('f1')+'KB';^
  8.         }elseif($s -lt 1073741824){^
  9.             return ($s/1mb).toString('f1')+'MB';^
  10.         }else{return ($s/1gb).toString('f1')+'GB';}^
  11.     };^
  12.     $web=new-object System.Net.WebClient;^
  13.     $web.Encoding = [System.Text.Encoding]::UTF8;^
  14.     $txt=$web.DownloadString('http://cn163.net/archives/23809/');^
  15.     $m=[Regex]::Matches($txt, 'ed2k:\/\/\^|file\^|.+?\^|\/');^
  16.     [void][System.Reflection.Assembly]::LoadWithPartialName('System.Web');^
  17.     $m^|%%{$url=[System.Web.HttpUtility]::UrlDecode($_.value,[System.Text.Encoding]::UTF8);^
  18.         $tmp=$url.split('^|');^
  19.         $size='['+(FormatSize (1*$tmp[3]))+']';^
  20.         '原链接:'+$_.value;^
  21.         '长链接:'+$url -replace '(?^<=^^.+?\^|file\^|)',$size;^
  22.         '短链接:'+(@($tmp[0], $tmp[1], ($size+$tmp[2]), $tmp[3], $tmp[4]) -join '^|')+\"|/`r`n\";^
  23.     }
  24. pause
复制代码

TOP

本帖最后由 3518228042 于 2017-5-1 15:32 编辑

多个htm和html网页,有文件大小情况下,文件大小出现了重复。[786.4KB][786.4KB]
  1. <a href="ed2k://|file|[786.4KB]SRAM%20Manager%20V2.0%20(PD)%20[a1].z64|786432|77B13047C64522DAE779A81B02F3D064|h=YATOBQYUSJORDPRNRAAMHZJKLMFTQYXZ|/">[786.4KB]SRAM Manager V2.0 (PD) [a1]</a><br />
复制代码
我想把所有网页的ed2k提取后各自保存为txt,然后只对txt进行替换,这个可以吗?方便用于批量下载和以后发帖分享

TOP

不知道为什么搜索很多修复方法试了,就是不能用,我记得前阵子还能用

TOP

还是没能提取后批量保存为txt,只能在命令窗口显示

TOP

回复 5# 3518228042


有可能是PATH环境变量被修改了,在CMD窗口执行这个命令看看结果:
  1. echo %path%
复制代码

TOP

解决了powershell,发现也是有长链接,本来标题里面有写各自保存为txt,被盖后表达的意思变了。
因为从几个ed2k网站下载了几百个网页,电影、电视剧和游戏,一个个网页单独保存能分辨,合一起不容易区分

TOP

回复 6# ShowCode


    直接Path就行

TOP

返回列表