批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

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

求助,多个文件,每个文件中都有几行包含日期、问题、方法的关键字数据行,但各个文件中包含关键字的行位置以及关键字在该行中的位置可能不固定。原文件如下:
文件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
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-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


    如果你测试成功了,请把完整代码发出来看看吧。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

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

TOP

返回列表