标题: [文本处理] 【已解决】如何通过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中提取到kb2976978和kb3035583然后在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/* :
- @echo off
- cscript -nologo -e:jscript "%~f0"
- pause & exit/b
- */
-
- //指定文件
- var f1 = "C:\\Windows\\1.log";
- var f2 = "2.txt";
- var f3 = "3.txt";
- var txt = "";
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var arr1 = fso.OpenTextFile(f2,1).ReadAll().match(/kb\d+/ig);
- var arr2 = [];
-
- for(var i = 0; i < arr1.length; i++){
- var re1 = new RegExp(arr1[i],"ig");
- if (!re1.test(arr2.join(","))){
- arr2.push(arr1[i]);
- re1.lastIndex = 0;
- }
- }
- for(var i=0;i<arr2.length;i++){
- var re2 =new RegExp("http://.*" + arr2[i] + ".*\.msu","i");
- var str = fso.OpenTextFile(f1,1).ReadAll().match(re2);
- txt+=str+"\r\n";
- }
- 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 |