Board logo

标题: [文本处理] 【已解决】批处理怎么提取文件指定内容? [打印本页]

作者: 447219071    时间: 2015-10-1 18:58     标题: 【已解决】批处理怎么提取文件指定内容?

感谢各位大大的帮忙,所提供的代码均有效,是本人提供的文件问题,对此表示歉意,让大家劳心了
  1. @echo off
  2. for /f "tokens=1* delims=<=" %%a in ('findstr "cpulink" a.txt') do for /f "tokens=1* delims=<" %%i in ("%%b") do echo;%%i
  3. pausee
复制代码
以上代码有问题,查找相关字符间(“cpulink=”至“<”之间的内容即:类似http://www.1.com/?id=KO&kid=love的网页内容)的内容并生成文本后,发现
当中间有特殊字符时如“=”、“&”就提取不出来。
要提到结果到b.txt的内容如下:
http://www.1.com/?id=KO&kid=love
http://www.2.com
http://www.3.com/?id=KO2&kid=love
http://www.4.com/?id=KO1&kid=love

另外怎么将这个批处理去掉最后一空行的代码合并到这一个批处理功能里
(生成的文本文件B.TXT最后有一行空行,需去掉)
已知去空行代码:
set/p=XXX<nul>XXX.txt
求高手解决!

如果a.txt中的字符串值cpulink=与<不好处理
a.txt也可以根据大侠的要求更改如<cpulink>http://www.1.com/?id=KO&kid=love<cpulink>类似的内容以便于批处理的易操作性


上传a.txt源文件
作者: DAIC    时间: 2015-10-2 07:26

把a.txt和test.bat压缩一下传上来,我试试
作者: cjiabing    时间: 2015-10-2 20:46

  1. @echo off
  2. for /f "tokens=2 delims=<=" %%a in ('findstr "cpulink" a.txt') do echo;%%a>>b.txt
  3. pause
复制代码

作者: 447219071    时间: 2015-10-3 14:20

回复 3# cjiabing
刚发现个问题:
如果要是想文本文件中生成的内容含有“=”或“&”特殊字符就不会出来,谢谢
作者: cjiabing    时间: 2015-10-3 19:08

回复 4# 447219071


   
  1. @echo off
  2. for /f "tokens=1* delims=<=" %%a in ('findstr "cpulink" a.txt') do for /f "tokens=1* delims=<" %%i in ("%%b") do echo;%%i
  3. pause
复制代码

作者: 447219071    时间: 2015-10-4 12:10

回复 5# cjiabing
代码没有全,且有错误,谢谢
作者: cjiabing    时间: 2015-10-5 17:35

回复 6# 447219071


    我亲自试过的才发代码,估计你是直接把代码输入到cmd窗口执行了。请把代码保存为  .bat  后缀名的文件再运行。
作者: 447219071    时间: 2015-10-5 19:13

本帖最后由 447219071 于 2015-10-5 19:17 编辑

怎么没有生成另外的b.txt
另外怎么将这个去最后一空行的代码合并到这一个功能里(生成的文本文件B.TXT最后有一行空行)
已知去空行代码:
set/p=XXX<nul>XXX.txt
作者: pcl_test    时间: 2015-10-12 12:35

  1. ::先下载http://batch-cn.qiniudn.com/tool/2.5.1/grep.exe
  2. grep -oP "(?<=cpulink=)[^<]+" "a.txt"
复制代码

作者: 447219071    时间: 2015-10-12 23:51

回复 9# pcl_test


    老大,没有用啊,且根本没生成新文件
即使生成,因为需要的内容含有特殊字符,我看到也提不出来
提出是空白的文档
作者: pcl_test    时间: 2015-10-12 23:57

回复 10# 447219071

加个重定向到b.txt即可
作者: wankoilz    时间: 2015-10-13 09:18

回复 10# 447219071
练练awk:
  1. #&cls&@gawk -f %0 a.txt>con&pause>nul&exit
  2. BEGIN {FS="cpulink=|<" }
  3. /cpulink/{
  4.     for(i=1;i<=NF;i++){
  5.     if($i~/http:/){print $i}
  6. }
  7. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk
作者: 447219071    时间: 2015-10-13 09:26

搞半天才知道原因。
经网上查找原因,得出批处理官方提供的prep程序不支持-P参数的原因导致不执行
在网上找得这个prep程序支持楼上所述功能,用官方的肯定不行
作者: pcl_test    时间: 2015-10-13 10:01

回复 13# 447219071

prep是什么?9楼不是给了下载地址?
作者: Batcher    时间: 2015-10-13 10:21

回复 13# 447219071


9楼提供的那个grep.exe是支持-P的,我这里测试没有问题。

c:\Test>type 1.txt
bbs.bathome.net

c:\Test>grep -Po bathome 1.txt
bathome
作者: 447219071    时间: 2015-10-13 11:33

回复 14# pcl_test


    对不起,我错了!
想问:如果想调出cpulink=start "" "http://hao.360.cn/?src=lm&ls=n1111111111"<p>中的
start "" "http://hao.qq.cn/?src=lm&ls=n1111111111"
调出的start "" 与后面网址断行了
作者: pcl_test    时间: 2015-10-13 12:31

回复 16# 447219071

这部分的网页源码是怎样的?
作者: 447219071    时间: 2015-10-13 14:36

回复 17# pcl_test

源码放上,谢谢

这个网页是我自己的博客,不知为何,它不仅取出的数据在“start ""与”http://hao.360.cn/?src=lm&ls=nxxxxxxxxxx“断行
还总自动在&后加了个“amp;”(红色部分多余的,这个是网页问题,估计得在批处理中运用删除命令才成)
就会出现像这样:http://hao.360.cn/?src=lm&amp;ls=nxxxxxxxxxx"
烦请辛苦一下
作者: pcl_test    时间: 2015-10-13 15:32

回复 18# 447219071
  1. //&cls&cscript -nologo -e:jscript "%~f0"<a.txt>b.txt&pause&exit/b
  2. var m = WScript.StdIn.ReadAll().match(/cpulink=[^<]+/g);
  3. for(var i=0;i<m.length;i++)
  4. WSH.Echo(m[i].replace(/cpulink=/i,'').replace(/&amp;/g,'&').replace(/\r?\n/g,' '));
复制代码





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