如果我在日志文件中找到字符串 "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?

我有一个目录 "D:\logs",其中包含许多日志文件,例如:HRS.log、SRM.log、KRT.log、PSM.log 等。 每个日志文件中可能有也可能没有字符串 "found"。如果日志文件包含字符串 "found",那么我必须在 "D:\flags" 文件夹中生成 "fileName.found" 例如:"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
)
@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 仅允许 return 包含该字符串的文件路径.这可以使其更有效,因为 for /f 命令 return 仅对文件路径感兴趣。

%%~nA 使用 nfor 变量修饰符,它是没有扩展名的文件名。查看 for /? 了解有关可用修饰符的更多信息。

好的,这是我针对上述问题找到的解决方案:

@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
)