Board logo

标题: [文本处理] [已解决]批处理如何提取多个文本中含有指定字符串的行里的数据并按指定格式合并输出 [打印本页]

作者: syqh2010    时间: 2015-3-2 13:06     标题: [已解决]批处理如何提取多个文本中含有指定字符串的行里的数据并按指定格式合并输出

本帖最后由 pcl_test 于 2016-8-13 12:20 编辑

BAT如何提取文本内容并有序排列
感谢网友 cobat,pcl_test,慕夜蓝化 的帮助!
有很多文本,内容相似,都有X=?,Y=?等字段,但在哪一行不固定。如何能提取内容并有序排列,写到另一个文本中b.txt中(b.txt内容可以直接copy到EXCEL中,每个数据占一个格)
如文本内容:
123456.txt
...
x=10.5
asdfd
y=25.1
fdgg
z=30
...

234567.txt
...
x=15.5
y=35.1
z=30.8
...

想要的效果:(b.txt内容可以直接copy到EXCEL中,每个数据占一个格)
b.txt
        x        y        z
123456        10.5        25.1        30
234567        15.5        35.1        30.8
作者: cobat    时间: 2015-3-2 13:34

本帖最后由 cobat 于 2015-3-2 16:30 编辑
  1. @echo off
  2. (
  3. echo ,x,y,z
  4. for %%a in (*.txt) do (
  5.     <nul set/p=%%~na
  6.     for %%b in (x,y,z) do (
  7.         for /f "delims=xyz=" %%c in ('findstr "%%b=" "%%a"') do <nul set/p=,%%c
  8.     )
  9.     echo,
  10. )
  11. )>b.csv
  12. pause
复制代码

作者: pcl_test    时间: 2015-3-2 13:36

回复 1# syqh2010
每个txt文件里都是只有唯一一个x=、y= 或z=吗?
作者: syqh2010    时间: 2015-3-2 14:23

回复 3# pcl_test
是的,只有一个
作者: pcl_test    时间: 2015-3-2 14:38

本帖最后由 pcl_test 于 2015-3-2 14:44 编辑

回复 4# syqh2010
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >"汇总.csv" echo,文件名,X,Y,Z
  4. for %%a in (*.txt) do (
  5. set s=
  6. for /f "tokens=2 delims==" %%b in ('findstr "x= y= z=" "%%a"') do set "s=!s!%%b,"
  7. >>"汇总.csv" echo,%%~na,!s:~,-1!
  8. )
  9. pause
复制代码

作者: 慕夜蓝化    时间: 2015-3-2 15:57

  1. @echo off
  2. (echo,                x        y        z
  3. for %%i in (*.txt) do (
  4.     set/p=%%~ni    <nul
  5.     for %%j in ("x=","y=","z=") do (
  6.         for /f "tokens=1,* delims==" %%a in ('findstr "^%%~j" "%%i"') do (
  7.             set/p=%%b        <nul
  8.         )
  9.     )
  10.     echo,
  11. )) >b.txt
  12. pause
复制代码

作者: syqh2010    时间: 2015-3-2 22:16

回复 2# cobat

谢谢你,正合我意!
作者: syqh2010    时间: 2015-3-2 22:19

回复 5# pcl_test

谢谢!也能达到效果,只是如果a.txt中没有xyz,也会列出来。

文件名        X        Y        Z
123        50        450        200
456        5        45        20
a        ~        -1
作者: syqh2010    时间: 2015-3-2 22:23

回复 6# 慕夜蓝化

谢谢你!
能列出结果,但是有点小问题
1)不能COPY到EXEL,每个占一格   
2)其它文本如a.txt中没有xyz的,也列出文件名了
                x        y        z
123    50        450        200        
456    5        45        20        
a
作者: pcl_test    时间: 2015-3-2 22:30

本帖最后由 pcl_test 于 2015-3-3 01:06 编辑

回复 8# syqh2010
已更正,适配各种情况
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >"汇总.csv" echo,文件名,X,Y,Z
  4. for %%a in (*.txt) do (
  5. findstr "x=" "%%a" >>$ ||echo x= >>$
  6. echo.>>$
  7. findstr "y=" "%%a" >>$ ||echo y= >>$
  8. echo.>>$
  9. findstr "z=" "%%a" >>$ ||echo z= >>$
  10. for /f "delims=" %%i in ($) do >>$$ echo,%%i,
  11. move $$ $ >nul
  12. set s=
  13. for /f "tokens=1* delims==" %%b in ('findstr "x= y= z=" "$"') do set "s=!s!%%c"
  14. >>"汇总.csv" echo,%%~na,!s!
  15. del $
  16. )
  17. pause
复制代码
[attach]8230[/attach]
作者: syqh2010    时间: 2015-3-2 22:41

回复 10# pcl_test
谢谢你!可以了!
作者: pcl_test    时间: 2015-3-2 22:41

回复 8# syqh2010
其实如果你细心点还会发现我们三个的代码对于txt文件里只有一个y=或是z=时,都有问题
作者: syqh2010    时间: 2015-3-2 22:50

回复 12# pcl_test
谢谢指点!
那么请问如何修改,因为.txt中并不一定xyz同时存在。
作者: cobat    时间: 2015-3-2 23:09

本帖最后由 cobat 于 2015-3-2 23:10 编辑

试试这个
  1. @echo off
  2. (
  3. echo ,x,y,z
  4. for %%a in (*.txt) do (
  5.     <nul set/p=%%~na
  6.     for %%b in (x,y,z) do (
  7.         <nul set/p=,
  8.         for /f "delims=xyz=" %%c in ('findstr "%%b=" "%%a"') do <nul set/p=%%c
  9.     )
  10.     echo,
  11. )
  12. )>b.csv
  13. pause
复制代码

作者: syqh2010    时间: 2015-3-2 23:54

回复 14# cobat
谢谢你!可以用!
作者: syqh2010    时间: 2015-3-3 03:28

回复 10# pcl_test

谢谢!辛苦了!




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