Использование цикла for для чтения файла строка за строкой и соответствия необходимого ключевого содержимого в DOS

Я хочу прочитать файл построчно и сравнить строку с данными пользователя. Если введенные данные соответствуют хотя бы одному слову во всей строке, окна my dos выведут эту строку.

Кто-нибудь может помочь мне завершить этот код?

SET user_key_in_data=abc

FOR /F "delims=" %%G IN (%~dp0database.txt) DO (CALL :match_function)

:match_function

Вот мой код попытки, но он не работает так, как я хочу:

@echo off
SETLOCAL EnableDelayedExpansion

SET matchpattern=NETWORK.*ISSUE

FOR /F "delims=" %%G IN (database.txt) DO (SET currentline=%%G & CALL :match_function)
pause
GOTO:eof

:match_function
    findstr /I /R /C %matchpattern% %currentline%
    if %errorlevel%==0 (
        echo %currentline%
    )
GOTO:eof

Обновлено после ответа Стефана:

Почему DOS все равно распечатает ненужный вывод, такой как FINDSTR: /C ignored когда условия не соответствуют?

Ниже приведен код + текстовый файл + дос вывод?

Код:

@echo off
SETLOCAL EnableDelayedExpansion

FOR /F "tokens=*" %%G IN (log_network.txt) DO (CALL :process %%G)
pause
GOTO:eof

:process
    echo %* | findstr /I /R /C "0632" > nul
    if %errorlevel%==0 (
        echo %*
    )
GOTO:eof

файл log_network.txt:

Set_Param_10A "TRUE" "xnetwork.exist.5846"

Set_Param_10A "ИСТИНА" "xnetwork.exist.7425" Set_Param_10A "ИСТИНА" "xnetwork.exist.1420" Set_Param_10A "ИСТИНА" "xnetwork.exist.0632" Set_Param_10A "ИСТИНА" "xnetwork.exist.1112" Set_Param "10A Set_Param" 10 ".exist.8524" Set_Param_10A "TRUE" "xnetwork.exist.3675" Set_Param_10A "TRUE" "xnetwork.exist.3344" Set_Param_10A "TRUE" "xnetwork.exist.1276" Set_Param_10A "TRUE" "xnetwork_ex_ara_Pa.4796"TRUE" "xnetwork.exist.3349" Set_Param_10A "TRUE" "xnetwork.exist.0048"

И вывод Dos:

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

Set_Param_10A "ИСТИНА" "xnetwirk.exist.0632"

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

FINDSTR: /C игнорируется

2 ответа

@ECHO OFF
SETLOCAL

SET "matchpattern=NETWORK.*ISSUE"

FOR /f "delims=" %%a IN (q24133524.txt) DO (SET currentline=%%a & CALL :match_function)
ECHO(=============
FINDSTR /i /r /c:"%matchpattern%" q24133524.txt


GOTO :EOF
:match_function
    ECHO(%currentline%|findstr /I /R /C:"%matchpattern%"
    if %errorlevel%==0 (
        echo %currentline%
    )
GOTO :eof

Я использовал файл с именем q24133524.txt содержащий ваши данные для моего тестирования.

Это показывает результаты одифицированной версии вашей процедуры (findstr находит строку и выводит ее, затем if errorlevel... выводит это снова.

Второй способ гораздо проще...

Вам не нужен%currentline%. Просто передайте строку в качестве параметра вашей подфункции:

... do call match_function %%G

Внутри подфункции вы можете использовать его как %* (все параметры)

:match_function
echo %* | findstr /I /R /C %"matchpattern%" >nul
if ...
Другие вопросы по тегам