使用 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"
使用regex[.]
==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"
我有数百个日志文件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"
使用regex[.]
==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"