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

[文本处理] 求助:如何用 BAT 批量提取多个文本中特定关键词后的数值?

[复制链接]
发表于 前天 00:20 | 显示全部楼层 |阅读模式
各位大佬好:

最近在处理一批日志文件(格式均为 .log),需要提取每个文件中特定关键词后面的数据并汇总到一个新的 CSV 文件中。

具体需求如下:

检索文件夹内所有的 .log 文件。

查找包含关键词 Total_Time: 的行。

提取该关键词后面的数字(例如 Total_Time: 450ms,只需要提取 450)。

将提取到的数字和对应的文件名存入 result.csv。

目前遇到的困难:
我尝试使用 findstr 配合 for /f 循环,但在处理字符串截取时,如果行内存在空格,提取的数值就会错位。

示例文本片段:

Status: Success
Process_ID: 1024
Total_Time: 450ms
End_Date: 2026-04-16

请问有没有更高效、稳定的写法?最好能兼容文件名中包含空格的情况。先谢过各位神犇了!
发表于 前天 07:25 | 显示全部楼层
  1. @(foreach($file in dir *.txt){
  2.     switch -Regex -File $file {
  3.     'Total_Time: (\d+)' {[PSCustomObject]@{文件名=$file.Name;时间=$matches[1]};break}}
  4. })|Export-Csv -Path result.csv -NoTypeInformation -Encoding UTF8
复制代码

powershell
发表于 前天 20:25 | 显示全部楼层
  1. Get-ChildItem *.log | ForEach-Object {
  2.     $f=$_.Name;
  3.     Get-Content $_.FullName | Where-Object { $_ -match "Total_Time:\s*(\d+)" } |
  4.     Select-Object -First 1 | ForEach-Object {
  5.         "$f,$($matches[1])"
  6.     }
  7. } | Set-Content -Path "result.csv" -Encoding UTF8
复制代码
发表于 8 小时前 | 显示全部楼层
本帖最后由 aloha20200628 于 2026-4-19 14:05 编辑

以下两个版本代码分别存为 test.bat 运行
处理当前目录及其子目录下的所有 *.log 文件
提取每个目标文件中的所求数据,按行汇总到当前目录下的 result.csv
输出行格式》数据,全路径文件名

test.bat 版本一
  1. @echo off &setlocal &(
  2.    for /f "tokens=1,2* delims=:" %%a in ('findstr /si "total_time:" *.log') do for /f "delims=ms " %%t in ("%%c") do echo,%%t,%%~fa
  3. )>"result.csv"
  4. pause&exit/b
复制代码


test.bat 版本二
  1. @echo off &powershell -nop -c "dir *.log -r|%%{$t=([regex]::match((gc $_ -raw),'(?i)(?<=time: *)\d+')).value;if($t){$t+','+$_.fullname}}">"result.csv"
  2. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-4-19 20:02

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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