如果我在日志文件中找到字符串“found”,如何编写批处理脚本来循环目录中的日志文件并生成“filename.found”?
Posted
技术标签:
【中文标题】如果我在日志文件中找到字符串“found”,如何编写批处理脚本来循环目录中的日志文件并生成“filename.found”?【英文标题】:How to write a batch script to loop through logfiles in directory and generate a "filename.found" if i find the string "found" in the log file? 【发布时间】:2020-08-14 09:16:09 【问题描述】:我有一个目录“D:\logs”,其中包含许多日志文件,例如:HRS.log、SRM.log、KRT.log、PSM.log 等。 每个日志文件中可能有也可能没有字符串“found”。如果日志文件包含字符串“found”,那么我必须生成“fileName.found”,例如:“D:\flags”文件夹中的“SRM.found”文件。 我已经编写了以下脚本,但无法继续进行:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%f IN ("D:\logs\*.log") do (
findstr /i "found" "%%f" >NUL
if "!ERRORLEVEL!"=="0" (
echo.>"D:\flags\%%f.found"
)
)
pause
exit /b
)
【问题讨论】:
我认为您需要延迟扩展错误级别测试。 你是对的。感谢您的修复。我已经在问题中编辑了代码 sn-p。但我还是不明白如何生成“filename.found”文件%%f
是 完全限定 路径,因此 "D:\flags\%%f.found"
不是有效路径。使用"D:\flags\%%~nf.found"
甚至"D:\flags\%%~nxf.found"
。
是的!那就是缺少的东西!谢谢@JosefZ
【参考方案1】:
@echo off
for /f "delims=" %%A in (
'2^>nul findstr /i /m "found" D:\logs\*.log'
) do echo( > "D:\flags\%%~nA.found"
findstr /i
可以在文件中搜索不区分大小写的字符串found
并使用参数/m
,它只允许返回包含该字符串的文件路径。这可以提高效率,因为for /f
命令只返回感兴趣的文件路径。
%%~nA
使用 for
变量修饰符 n
这是没有扩展名的文件名。查看for /?
了解有关可用修饰符的更多信息。
【讨论】:
虽然问题没有指定生成的.found
文件中是否应该有任何内容,但我可能会建议从中删除空格字符。 我经常发现CD.
对此很有用,即) do cd.> "D:\flags\%%~nA.found"
【参考方案2】:
好的,这是我为上述问题找到的解决方案:
@echo off
setlocal enabledelayedexpansion
for %%f IN ("D:\logs\*.log") do (
find "found" "%%f" >NUL
if "!ERRORLEVEL!"=="0" (
echo.>"D:\flags\%%~nf.found"
)
)
pause
exit /b
)
【讨论】:
我在您的代码中添加了缩进,以清楚地突出显示它有不平衡的括号。我还将要求您查看在您之前提供的答案,这几乎肯定会更有效。 感谢@Compo,是的,之前的答案更有效以上是关于如果我在日志文件中找到字符串“found”,如何编写批处理脚本来循环目录中的日志文件并生成“filename.found”?的主要内容,如果未能解决你的问题,请参考以下文章
我只需要在多个日志文件中找到匹配模式行的下一行。我在这个网站上找到了下面的 awk 命令
android调试时遇到source not found 如何解决,求解决~!
未找到 Laravel 6 css 和 js 文件( net::ERR_ABORTED 404 (Not Found) )