找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 34682|回复: 13

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

[复制链接]
发表于 2015-12-24 12:38:58 | 显示全部楼层 |阅读模式
本帖最后由 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>
提取
站长茶馆
站长交易
站长技术
保存到一个新的记事本。

求批处理达人帮忙处理,谢谢了
发表于 2015-12-24 13:59:18 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-12-24 14:23:27 | 显示全部楼层
你好,能帮我做成适配性强一点的吗?
样本数据2可以自定义要提取内容的前后的分隔符号
 楼主| 发表于 2015-12-24 14:29:52 | 显示全部楼层
  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:06 | 显示全部楼层
自己学正则表达式去。
发表于 2015-12-24 21:32:35 | 显示全部楼层
回复 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
复制代码
发表于 2015-12-24 21:39:47 | 显示全部楼层
  1. sed "s/.*|//" 1.txt > 1_new.txt
复制代码
  1. sed "s#.*>\(.*\)</a>#\1#" 2.txt > 2_new.txt
复制代码
发表于 2015-12-24 21:45:52 | 显示全部楼层
  1. grep -Po "(?<=\|).*" 1.txt > 1_new.txt
复制代码
  1. grep -Po "(?<=>).*(?=</a>)" 2.txt > 2_new.txt
复制代码
发表于 2015-12-25 13:04:23 | 显示全部楼层
回复 2# flyinnet9


    这代码学习了
发表于 2015-12-25 13:06:16 | 显示全部楼层
回复 2# flyinnet9


    原来delims还可以这样分
发表于 2015-12-29 21:51:41 | 显示全部楼层
如果 1楼的问题的描述都是类似网页链接这样的,也可以把txt  ren  html,,,然后用HtoX32c.exe来直接提取网页文字
 楼主| 发表于 2016-1-7 20:21:38 | 显示全部楼层
本帖最后由 pcl_test 于 2016-1-7 20:48 编辑

回复 6# /zhqsystem/zhq

你好,如果前面">和后面的</a>不固定,要写成自定义的要怎么写呢?
发表于 2016-1-8 00:04:57 | 显示全部楼层
本帖最后由 /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
复制代码
 楼主| 发表于 2016-1-22 21:15:30 | 显示全部楼层
回复  rigg
加入自动识别空格前字段=后字段[红色区域],%%k为提取的字段,例如: 提取的内容
也可以利用上次 ...
/zhqsystem/zhq 发表于 2016-1-8 00:04

非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:31 , Processed in 0.021035 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表