Как написать пакетный скрипт для l oop через файлы журналов в каталоге и сгенерировать «filename.found», если я найду строку «found» в файле журнала? - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть каталог "D: \ logs", состоящий из множества файлов журнала, например: HRS.log, SRM.log, KRT.log, PSM.log et c. Каждый из этих файлов журнала может иметь или не иметь строку "найдено" внутри них. Если файл журнала содержит строку «найдено», то мне нужно сгенерировать файл «fileName.found», например: «SRM.found» в папке «D: \ flags». я написал следующий скрипт, но не могу продолжить:

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

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020
@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 /? для получения дополнительной информации о доступных модификаторах.

0 голосов
/ 30 апреля 2020

хорошо, вот решение, которое я нашел для вышеуказанного вопроса, который я задал:

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