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

[文件操作] 批处理如何从服务器搜索内容包含某字符串,并生成TXT文件记录该字符串出现的次数

1
各位老师:

如何从服务器的文件夹中的TXT文档搜索包含特定字符串(有几组,如loading fail 和HF fail或者其他,自己可以定义的),并将该关键字出现的次数记录到新的TXT文件中,因为TXT里面是按照时间每行每行记录信息的,最好是能自己输入时间来按照时间段来搜索并记录次数。例如:

服务器地址:
\\192.168.11.123\pool\test123\p01-1    (注:在p01-1文件夹下有很多TXT文件,txt 文件里面都是按照时间每行每行记录的,)

需求:按照自己输入的时间 :年-月-日 -时-分在p01-1中搜索关键字如loading fail 并在指定路径(如D\123\下)生成一个新TXT文件来记录出现这个关键字的次数。



万分感谢!

  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. # 功能:按时间搜索指定目录下txt文档中的字符串,按ctrl+c退出
  9. $rootdir = "\\192.168.11.123\pool\test123\p01-1"
  10. $outfile = "搜索结果.log"
  11. $arrPso = foreach ($arrLines in Get-Content -ReadCount 0 -Path "$rootdir\*.txt" -Filter *.txt -ErrorAction SilentlyContinue) {
  12.   foreach ($line in $arrLines) {
  13.     $sDate, $sTime, $sText = $line -split '\s+', 3
  14.     ($pso = New-Object psobject -Property @{
  15.       Date = [datetime]"$sDate $sTime"
  16.       Text = $sText
  17.     })
  18.   }
  19. }
  20. $Host.UI.RawUI.WindowTitle = "按 Ctrl+C 退出"
  21. # exit
  22. while ($true) {
  23.   do {
  24.     $startTime = $null
  25.     $startTime = (Read-Host -Prompt 请输入起始时间) -as [datetime]
  26.   } while ($null -eq $startTime)
  27.   do {
  28.     $endTime = $null
  29.     $endTime = (Read-Host -Prompt 请输入结束时间) -as [datetime]
  30.   } while ($null -eq $endTime)
  31.   $strSearch = Read-Host -Prompt 请输入查找字符串
  32.   $alResult = $null
  33.   $arrPso | Where-Object { $_.Date -ge $startTime -and $_.Date -lt $endTime -and $_.Text.Contains($strSearch) } -OutVariable alResult | Format-Table -AutoSize
  34.   "$startTime $endTime $strSearch $($alResult.Count)" | Add-Content -LiteralPath $outfile
  35. }
复制代码
微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


    帮忙指导下,谢谢老师

TOP

回复 4# Batcher


    帮忙指导下。感谢老师

TOP

老师好,如第一张图片就是文件夹下面的TXT文件,第二张图片就是TXT文件里面的内容。需要自己输入 ...
bat.start 发表于 2022-5-15 20:04



    最好是能自己输入一个时间区间,然后查找。如1/7/2022 06:36到1/8/2022 06:36

TOP

回复  bat.start


请给出几行真实数据,并举例说明需要获取哪一部分信息。
如果需要上传文件,可以用 ...
Batcher 发表于 2022-5-14 09:57



    老师好,如第一张图片就是文件夹下面的TXT文件,第二张图片就是TXT文件里面的内容。需要自己输入日期,键入关键字如ALARM,然后就可以按照输入的日期来查找关键字,然后关键字出现的次数计数,输出到指定路径下的新TXT文档里。

TOP

回复 1# bat.start


请给出几行真实数据,并举例说明需要获取哪一部分信息。
如果需要上传文件,可以用阿里云盘或百度网盘。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# flashercs


代码实现的应该不是楼主的真实需求,因为他要求:
按照时间段来搜索并记录次数
文件里面都是按照时间每行每行记录的
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off
  2. cd /d "%~dp0"
  3. set rootdir=\\192.168.11.123\pool\test123\p01-1
  4. set outfile="搜索结果.txt"
  5. :loop
  6. set dtm=
  7. set str=
  8. set /p dtm=输入时间:
  9. if not defined dtm goto end
  10. set /p str=输入搜索字符串:
  11. if not defined str goto end
  12. findstr /ilbc:"%dtm%" "%rootdir%\*.txt"|find /i /c "%str%">>%outfile%
  13. goto loop
  14. :end
  15. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

返回列表