Подтвердить что ты не робот

Пакет script - читать строки за строкой

У меня есть файл журнала, который мне нужно прочитать в строке за строкой и передать строку в следующий цикл.

Во-первых, grep файл журнала для "основного" слова (например, "ошибка" ) в отдельном файле - чтобы он был небольшим. Теперь мне нужно взять отдельный файл и прочитать его в строке за строкой - каждая строка должна перейти в другой цикл (в этом цикле я grep журналы и разделить его в блоках), но я застрял здесь.

Журнал выглядит как

xx.xx.xx.xx - - "http://www.blub.com/something/id=?searchword-yes-no" 200 - "something_else"

с циклом for/f Я просто получаю IP вместо полной строки.

Как я могу передать/написать/буферизировать всю строку? (не имеет значения, что написано в строке)

4b9b3361

Ответ 1

Попробуйте следующее:

@echo off
for /f "tokens=*" %%a in (input.txt) do (
  echo line=%%a
)
pause

из-за tokens=* все записывается в %a

изменить: чтобы ответить на ваш комментарий, вам придется сделать это следующим образом:

@echo off
for /f "tokens=*" %%a in (input.txt) do call :processline %%a

pause
goto :eof

:processline
echo line=%*

goto :eof

:eof

Из-за пробелов вы не можете использовать %1, потому что это будет содержать только часть до первого пробела. И поскольку строка содержит кавычки, вы также не можете использовать :processline "%%a" в сочетании с %~1. Поэтому вам нужно использовать %*, который получает %1 %2 %3 ..., поэтому вся строка.

Ответ 2

Решение "вызов" имеет некоторые проблемы.

Он терпит неудачу со множеством разных содержимого, так как параметры CALL анализируются дважды парсером.
Эти линии будут создавать более или менее странные проблемы.

one
two%222
three & 333
four=444
five"555"555"
six"&666
seven!777^!
the next line is empty

the end

Поэтому вы не должны использовать значение %%a с вызовом, лучше переместите его в переменную, а затем вызовите функцию только с именем переменной.

@echo off
SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ t.txt"`) do (
    set "myVar=%%a"
    call :processLine myVar
)
goto :eof

:processLine
SETLOCAL EnableDelayedExpansion
set "line=!%1!"
set "line=!line:*:=!"
echo(!line!
ENDLOCAL
goto :eof

Ответ 3

Это сработало для меня в прошлом, и оно даже расширит переменные среды в файле, если это возможно.

for /F "delims=" %%a in (LogName.txt) do (
     echo %%a>>MyDestination.txt
)