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

[文本处理] 求助批处理提取包含多个关键字的整行数据,按不同关键字生成新文件的不同列

求助,多个文件,每个文件中都有几行包含日期、问题、方法的关键字数据行,但各个文件中包含关键字的行位置以及关键字在该行中的位置可能不固定。原文件如下:
文件1中:
日期:20201115
问题:1   
方法:2

文件2中:
日期:20201120
问题:3
方法:4

文件3中:
日期:20201121
问题:5
方法:6
。。。。。。。。
想批量提取这些文件中的包含日期、问题、方法的整行数据合并生成新的文件,如果能生成EXCEL文件最好,内容如下 :
日期:20201115     问题:1      方法:2
日期:20201120     问题:3      方法:4
日期:20201121     问题:5      方法:6

本帖最后由 ivor 于 2020-11-15 19:45 编辑
  1. #&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit
  2. (dir *.txt |  %{
  3. $txt = [Io.File]::ReadAllText("$_",[Text.Encoding]::UTF8)
  4. $date = [Regex]::Match($txt, "日期:\d+")
  5. $question = [Regex]::Match($txt, "问题:\d+")
  6. $method = [Regex]::Match($txt, "方法:\d+")
  7. ($date.Value,$question.Value,$method.Value) -join "`t"
  8. } )| tee new.csv
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

ivor 发表于 2020-11-15 19:30


执行时,提示"powershell 不是内部或外部命令.....",无法运行

TOP

ivor 发表于 2020-11-15 19:30

加上Powershell路径后,提示”拒绝访问“

TOP

回复 1# hnzwei
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
  4.     set "str="
  5.     for /f "delims=" %%b in ('type "%%a"') do (
  6.         set "line=%%b"
  7.         if "!line:日期:=!" neq "!line!" (
  8.             set "str=!str!,%%b"
  9.         ) else if "!line:问题:=!" neq "!line!" (
  10.             set "str=!str!,%%b"
  11.         ) else if "!line:方法:=!" neq "!line!" (
  12.             set "str=!str!,%%b"
  13.         )
  14.     )
  15.     echo,!str:~1!
  16. ))>"1.csv"
复制代码
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复  hnzwei 请参考Q-04把bat文件保存为ANSI编码:
Batcher 发表于 2020-11-15 20:59


OK了,不是一般的感谢,谢谢!牛哥!!!!

TOP

回复 5# Batcher

第8行 set "str=!str!,%%b" 中!str!,是否是多余的,直接set "str=%%b"
第15行改为echo,!str!就行了。

TOP

回复 7# qixiaobin0715


    如果你测试成功了,请把完整代码发出来看看吧。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

看样子不能想当然,抱歉!

TOP

回复 5# Batcher 你好!非常感谢之前你帮我写的按不同关键字生成新文件的不同列的批处理,还想再麻烦指导一下,如何把当前文件名也写到新文件的列中,新文件某一行的内容:旧文件名    旧文件A关键行     旧文件B关键行     旧文件C关键行 。。。。

TOP

回复 10# hnzwei


你把5楼代码第15行改成这样试试:
echo %%a !str:~1!
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 11# Batcher 能提取出来文件名,但跟第一个关键行的内容合并到一起了,合并成一列了  比如:001.txt日期:2021-02-03了   想要的是001.txt    日期    问题     ...

TOP

回复 11# Batcher 可以了,非常感谢!!!我改成这样:echo %%a, !str:~1!就可以了,加了个,号就可以分列了

TOP

返回列表