Использование цикла 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 ...