使用 CMD 或 POWERSHELL 查找失败的日志文件

Using CMD or POWERSHELL to find failed log files

我有数百个日志文件import.log,一个成功的日志文件有最后一行“Task finished successfully”。

每个日志文件都在一个单独的目录中,所以我的搜索任务是遍历目录。读取每个 import.log,并报告 的完整路径失败 import.log.

失败的 import.log 包含“Task finished successfully”。 或者,import.log的最后一行不是“Task finished successfully

我目前的解决方案我只找到成功的import.log

findstr /s /m "Task finished successfully" import.log

请指教如何用CMD工具查找失败的日志文件,首选CMD工具,次选POWERSHELL解决方案。

关注 avery_larry 的有用评论。我创建了一个可行的笨拙解决方案。

我写了一个批处理文件find-failed-imports.bat

查找失败-imports.bat

echo off

for /r ..  %%a in (import.l?g) do (findstr "Task finished successfully" "%%a" >nul  || echo %%a failed)

欢迎任何更好的解决方案。

尝试使用一些任务失败的日志文件。 在文件中获取结果时(也在 Crtl + c 中)。

我建议这样:


@echo off 

set "_err=.\log_error.log" && set "_str=Task.finished.successfully" 

for /r . %%a in (import.log)do findstr "%_str%" "%%~a" >nul || echo=%%~a>>"%_err%"
if exist "%_err%" type "%_err%"|clip & type "%_err%"
exit /b 

观察:

  • Findstr will find/check this string "Task finished successfully"

  • And can similar find this one: "Task finished unsuccessfully"


为了防止un成功,使用:"Task.finished.successfully"

使用[.]==wildcard: any character

阅读更多关于 FindSTR in this link


  • 更新: 建议检查名称 == imp*error.log 和大小 > 0
  • 的文件大小

@echo off && cd /d "%~dp0"

set "err=.\log_error.log" && set "str=Task finished successfully"

for /f tokens^=* %%a in ('dir /s /b imp*.log')do if %%~Za neq 0 (
 echo %%~nxa|find /i ".error.log" >nul && echo="%%~fa" >>"%err%"
 ) || ( find /i /v "%str%" "%%~a" >nul && echo="%%~fa" >>"%err%")

(if exist "%err%" type "%err%" | clip && type "%err%") && exit /b 

对不起我的英语


我知道这是您的第二选择,但这里有一个 powershell 可以满足您的需求。

$folder = "C:\folder\test\*"
$files = gci -Path $folder -Force -recurse -File -include "*.log"

foreach ($file in $files){
    $content = gc $file.FullName -raw | Out-Null
    if($content -match "Task finished successfully"){
        Write-host $File.Name imported successfully
        # Do more stuff. 
    }
    elseif((Get-Item $file.FullName).length -eq 0){
        Write-host $file is empty.
        #Do more stuff
    }
    else{
        Write-host $file import was unsuccessful.
        #Do more stuff
    }

}

您可以将 powershell 脚本命名为 'checklogs.ps1',然后使用以下命令从 .bat 调用它:

@echo off
powershell.exe -executionpolicy bypass -file "C:\folder\checklogs.ps1"