Board logo

标题: [文本处理] [已解决]BAT如何提取TXT中某两个字符中间的文本? [打印本页]

作者: rigg    时间: 2015-12-24 12:38     标题: [已解决]BAT如何提取TXT中某两个字符中间的文本?

本帖最后由 rigg 于 2016-1-22 21:15 编辑

样本数据1:
http://www.abc.com/eee.txt|123abc
http://www.cde.com/12e.txt|4325te
提取|后面的字符,
123abc
4325te
保存到一个新的记事本。

样本数据2:
<a href="http://bbs.chinaz.com/forum-51-1.html" target="_blank">站长茶馆</a>
<a href="http://bbs.chinaz.com/forum-167-1.html" target="_blank">站长交易</a>
<a href="http://bbs.chinaz.com/forum-165-1.html" target="_blank">站长技术</a>
提取
站长茶馆
站长交易
站长技术
保存到一个新的记事本。

求批处理达人帮忙处理,谢谢了
作者: flyinnet9    时间: 2015-12-24 13:59

  1. @echo off
  2. (for /f "tokens=2 delims=|" %%a in (1.txt) do echo.%%a)>result.txt
复制代码
  1. @echo off
  2. (for /f "tokens=2 delims=<>" %%a in (2.txt) do echo.%%a)>result.txt
复制代码

作者: rigg    时间: 2015-12-24 14:23

你好,能帮我做成适配性强一点的吗?
样本数据2可以自定义要提取内容的前后的分隔符号
作者: rigg    时间: 2015-12-24 14:29

  1. @echo off&setlocal enabledelayedexpansion
  2. set/p myfile=拖入要处理的文本并回车:
  3. set/p qian=输入前置符并回车:
  4. set/p hou=输入后置符并回车:
  5. (for /f "delims=" %%a in (%myfile%) do (
  6.     set "str=%%a"
  7.     for %%b in (^%qian% ^%hou% ) do set "str=!str:%%b= !"
  8.     for %%b in (!str!) do set/a 1/1%%b &&echo,%%b
  9. ))>result.txt 2>nul
  10. start result.txt
复制代码
上面的是我参照别人的改的, 但是好像取出来的文本不对。
作者: 依山居    时间: 2015-12-24 15:36

自己学正则表达式去。
作者: /zhqsystem/zhq    时间: 2015-12-24 21:32

回复 1# rigg
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type "%~f1"')do (
  3. set "name=%%i"
  4. set "name=!name:|=\!"
  5. set "name=!name:</a>=!"
  6. set "name=!name:>=\!"
  7. for /f "delims=" %%j in ("!name!") do (
  8.   (echo,%%~nxj)>>"%~dp1new_%~nx1"
  9. )
  10. )
  11. pause
复制代码

作者: DAIC    时间: 2015-12-24 21:39

  1. sed "s/.*|//" 1.txt > 1_new.txt
复制代码
  1. sed "s#.*>\(.*\)</a>#\1#" 2.txt > 2_new.txt
复制代码

作者: DAIC    时间: 2015-12-24 21:45

  1. grep -Po "(?<=\|).*" 1.txt > 1_new.txt
复制代码
  1. grep -Po "(?<=>).*(?=</a>)" 2.txt > 2_new.txt
复制代码

作者: qie2015    时间: 2015-12-25 13:04

回复 2# flyinnet9


    这代码学习了
作者: qie2015    时间: 2015-12-25 13:06

回复 2# flyinnet9


    原来delims还可以这样分
作者: hlzj88    时间: 2015-12-29 21:51

如果 1楼的问题的描述都是类似网页链接这样的,也可以把txt  ren  html,,,然后用HtoX32c.exe来直接提取网页文字
作者: rigg    时间: 2016-1-7 20:21

本帖最后由 pcl_test 于 2016-1-7 20:48 编辑

回复 6# /zhqsystem/zhq

你好,如果前面">和后面的</a>不固定,要写成自定义的要怎么写呢?
作者: /zhqsystem/zhq    时间: 2016-1-8 00:04

本帖最后由 /zhqsystem/zhq 于 2016-1-8 01:05 编辑

回复 12# rigg
加入自动识别空格前字段=后字段[红色区域],%%k为提取的字段,例如: <adsfdfe jvmbn,n         ==ed>提取的内容</adsfdfe>
也可以利用上次发的替换>为\,删除后字段剩余%%~nx变量,[这种提取内容不允许有\会被误读成路径%%~nx时就会出错]
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type "%~f1"')do (
  3. for /f %%j in ("%%~i")do (
  4.   set "names=%%i"
  5.   set "names=!names:%%j=!"
  6.   set "names=!names:"=!"
  7.   set "name=%%j"
  8.   set "name=!name:<=</!"
  9.   set "name=!name!>"
  10. )
  11. for /f "delims=" %%j in ("!name!")do (
  12.   set "names=!names:%%j=!"
  13.   set "names=!names:<=!"
  14. )
  15. for /f "tokens=1,* delims=>" %%j in ("!names!")do (echo,%%k)
  16. rem:此行的上下行只保留其一,2个标点">"更改上行tokens=2,*,下两行不区分>标点只取值最后的名称及其后缀
  17. set "names=!names:>=\!"
  18. for /f "delims=" %%j in ("!names!")do (echo,%%~nxj)
  19. )
  20. pause
复制代码

作者: rigg    时间: 2016-1-22 21:15

回复  rigg
加入自动识别空格前字段=后字段[红色区域],%%k为提取的字段,例如: 提取的内容
也可以利用上次 ...
/zhqsystem/zhq 发表于 2016-1-8 00:04

非常感谢




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