【问题标题】:Extract Information from TXT files从 TEXT 文件中提取信息
【发布时间】:2014-08-14 16:04:59
【问题描述】:

我正在考虑创建一个批处理文件,该文件从过去 3 个月的日志文件中的 txt 文件中提取信息,并输出以下信息:

  • 计算机名取自文件路径:

      \\Server\e$\Users\\**COMPUTER_NAME**\path\search_file.txt
    
  • 搜索文件中出现的总次数(很高兴 - 不是必须)

  • 发生时间: 正在搜索的文件在找到时具有以下格式:

      09:24:08:17 (WS:PED:RunRequest)
      Response: (0) None
      Error   : -2
    

所以...

COMPUTER_NAME
Number of occurrences found
Time of occurrence i.e. 09:24:08:17

我有这个作为开始:

@echo off
echo.
echo Searching for all Error   : -2...
setlocal enabledelayedexpansion
for %%a in (\\Sc0320svr0001\e$\Users\SC0320POS0003\E2ELOGS\ped_20140812_092355.dbg) do       
(
set found=false
for /f "skip=2 tokens=*" %%b in ('find "Error   : -2" "%%a"') do (
  if "!found!"=="false" (
     echo %%b >>output.txt
     set found=true
      )
   )
)

这样我只提取“错误:-2”,其中可能有多个实例。

找到批次做个计数:

@find /c /i "Error   : -2" "\\Sc0320svr0001\e$\Users\SC0320POS0003\E2ELOGS\*.dbg" >>output.txt

但是,如果大于零,则只寻找输出。

文件部分:

09:23:55:68 (WS:PED:OpenHandler)
Exit

09:23:55:76 (WS:PED:RunRequest)
Request: (1) Check PED status

09:23:55:86 (WS:PED:Write)
Data: 97

09:24:08:08 (WS:PED:Write)
Error: 30

09:24:08:17 (WS:PED:RunRequest)
Response: (0) None
Error   : -2
Message : 
Receipt :

【问题讨论】:

    标签: batch-file find output


    【解决方案1】:

    这只处理一个文件...检查它是否在做这项工作:

    @echo off
    
    setlocal enableDelayedExpansion 
    set file_txt=apple.txt
    
    set "current_line="
    set "prev_line="
    set "prev_prev_line="
    
    set counter=0
    
    
    for /f "tokens=* delims=" %%a in (%file_txt%) do (
        rem echo -%%a-
    
        if defined prev_line (
            set prev_prev_line=!prev_line!
        )
    
        if defined current_line (
            set prev_line=!current_line!
        )
    
    
    
        set "current_line=%%~a"
    
        if "!current_line: =!" EQU "Error:-2" (
    
           set /a counter=counter+1
           echo(
           echo Error -2 found
           echo in %file_txt%
           echo time is !prev_prev_line!
           echo responces !prev_line!
           echo(
        )
    )
    
    echo total count %counter%
    
    endlocal
    

    EDIT.处理多个文件

    @echo off
    
    setlocal enableDelayedExpansion
    :: separate the file names with ; 
    set files_to_process=apple.txt;banana.txt;pear.txt
    
    set "current_line="
    set "prev_line="
    set "prev_prev_line="
    
    set counter=0
    
    for %%f in (%files_to_process%) do (
    
        for /f "tokens=* delims=" %%a in (%file_txt%) do (
            rem echo -%%a-
    
            if defined prev_line (
                set prev_prev_line=!prev_line!
            )
    
            if defined current_line (
                set prev_line=!current_line!
            )
    
    
    
            set "current_line=%%~a"
    
            if "!current_line: =!" EQU "Error:-2" (
    
               set /a counter=counter+1
               echo(
               echo Error -2 found
               echo in %file_txt%
               echo time is !prev_prev_line!
               echo responces !prev_line!
               echo(
            )
        )
    )
    echo total count %counter%
    
    endlocal
    

    【讨论】:

    • 运行脚本替换 file_txt="\\Sc0320svr0001\e$\Users\SC0320POS0003\E2ELOGS\ped_20140812_092355.dbg" 返回计数为零,但是,文件中出现了 4 次。
    • 另外,我需要跨多个文件执行此操作,而不仅仅是一个。不过可以看到你要去哪里!
    • @T-Diddy 你能提供文件完整内容的链接吗?
    • 请看我原帖的底部。现在就放一些额外的信息。
    • @T-Diddy 。这是给定内容Error -2 found in apple.txt time is Response: (0) None responces Response: (0) None total count 1 的输出,这对我来说似乎是正确的。迭代槽文件很容易......只需要知道如何更改脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多