Board logo

标题: [文本处理] 【已解决】如何通过cmd提取特定内容,然后应用于其他文件 [打印本页]

作者: 七剑下面条    时间: 2015-7-14 17:09     标题: 【已解决】如何通过cmd提取特定内容,然后应用于其他文件

本帖最后由 七剑下面条 于 2015-7-15 09:04 编辑

一共有两个文本文件,分别是1.log和2.txt
其中1.log的内容是
sadasdasdas
fsfs adasdahttp://download.windowsupdate.com/d/msdownload/update/software/updt/2015/07/windows8.1-kb3065988-x64_6f8f55eed54d923705eced4512a8d1fe68ceb608.msu fsfsdf
dsfwefdsfehttp://download.windowsupdate.com/d/msdownload/update/software/updt/2015/07/windows8.1-kb2976978-v9-x64_13c4eccc3f91f4fcab53ea00f9bd186f16fc52a5.msu fdfsfe
werefsehttp://download.windowsupdate.com/d/msdownload/update/software/secu/2015/07/windows8.1-kb3065823-x64_537952ddc87d798968fc862f1f891a422b81532b.msu sfsefsdf
erfwefwehttp://download.windowsupdate.com/d/msdownload/update/software/updt/2015/07/windows8.1-kb3035583-x64_dee17c3446210b00e106a9fbb2f4aa0696902825.msu rfwefe
dsdad


2.txt的内容是
无关文字无关文字
无关文字无关文字无关文字(kb2976978)无关文字无关文字daasd无关文字
无关文字无关文字无关文字无关文字无关文字无关文字
无关文字无关文字无关文kb3035583字无关文字无关文字


我想要做的事情是从2.txt中提取出kb*******,然后获取到1.log中所包含它的网址

比方说于此文,即

从2.txt中提取到kb2976978kb3035583然后在1.log中获得他们的网址(他们都以http开头,以msu结尾)
http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/07/windows8.1-kb2976978-v9-x64_13c4eccc3f91f4fcab53ea00f9bd186f16fc52a5.msu

http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/07/windows8.1-kb3035583-x64_dee17c3446210b00e106a9fbb2f4aa0696902825.msu
并且把得到的网址输入在3.txt中

总之,能够得到3.txt就好

谢谢论坛里的大神,辛苦了。
作者: pcl_test    时间: 2015-7-14 17:41

本帖最后由 pcl_test 于 2015-7-14 21:37 编辑
  1. 1>1/* :
  2. @echo off
  3. cscript -nologo -e:jscript "%~f0"
  4. pause & exit/b
  5. */
  6. //指定文件
  7. var f1 = "C:\\Windows\\1.log";
  8. var f2 = "2.txt";
  9. var f3 = "3.txt";
  10. var txt = "";
  11. var fso = new ActiveXObject("Scripting.FileSystemObject");
  12. var arr1 = fso.OpenTextFile(f2,1).ReadAll().match(/kb\d+/ig);
  13. var arr2 = [];
  14. for(var i = 0; i < arr1.length; i++){
  15. var re1 = new RegExp(arr1[i],"ig");
  16. if (!re1.test(arr2.join(","))){
  17.     arr2.push(arr1[i]);
  18.     re1.lastIndex = 0;
  19. }
  20. }
  21. for(var i=0;i<arr2.length;i++){
  22.     var re2 =new RegExp("http://.*" + arr2[i] + ".*\.msu","i");
  23.     var str = fso.OpenTextFile(f1,1).ReadAll().match(re2);
  24.     txt+=str+"\r\n";
  25. }
  26. fso.CreateTextFile(f3,2).Write(txt);
复制代码

作者: 七剑下面条    时间: 2015-7-14 19:14

回复 2# pcl_test


  十分感谢,成功了。

有一个问题我希望识别KB,kb的时候不区分大小写
还有一个问题是1.log位于C:Windows目录里

如果是这个样子的话,该如何修改,谢谢
作者: pcl_test    时间: 2015-7-14 19:20

本帖最后由 pcl_test 于 2015-7-14 19:22 编辑

改几处
var f1 = "C:\\Windows\\1.log";
match(/kb\d+/ig)
\.msu","ig")
作者: 七剑下面条    时间: 2015-7-14 20:06

回复 4# pcl_test

感谢您的回复,可能我有点啰嗦,还有一个问题是
因为2.txt中可能有多个地方包含kb2976978和kb3035583,所以导致3.txt得到的内容是这个样子的(每一行都有重复的网址,他们用逗号隔开)

我想去掉多余的网址,每一行仅保留一个有用的。
作者: pcl_test    时间: 2015-7-14 21:27

回复 5# 七剑下面条

已在2楼修改




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