[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 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
复制代码

TOP

回复 1# syqh2010
每个txt文件里都是只有唯一一个x=、y= 或z=吗?

TOP

回复 3# pcl_test
是的,只有一个

TOP

本帖最后由 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
复制代码

TOP

  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
复制代码
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

回复 2# cobat

谢谢你,正合我意!

TOP

回复 5# pcl_test

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

文件名        X        Y        Z
123        50        450        200
456        5        45        20
a        ~        -1

TOP

回复 6# 慕夜蓝化

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

TOP

本帖最后由 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
复制代码
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

TOP

回复 10# pcl_test
谢谢你!可以了!

TOP

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

TOP

回复 12# pcl_test
谢谢指点!
那么请问如何修改,因为.txt中并不一定xyz同时存在。

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

回复 14# cobat
谢谢你!可以用!

TOP

返回列表