У меня есть файл журнала, который контролирует большую систему, включая запросы и подтверждения. Моя цель состоит в том, чтобы быть в состоянии:Пакетный скрипт для захвата строк с помощью findstr без пути к файлу
1. Loop через скрипт и получить строки, где запросы на & их подтверждения случаться
2. Вытащите целые линии значения как строки и сохранять их как переменные для изменения строки для вывода в другое место.
Вот что я до сих пор:
@ECHO off
setlocal
setlocal enabledelayedexpansion
setlocal enableextensions
:: Lets get today's date, formatted the way the ABCD File is named
for /f "tokens=1-5 delims=/ " %%d in ("%date%") do set targetDate=%%f-%%d-%%e
:: Now we set the targetFile name
SET ABCDLogsFile=C:\Users\me\Documents\monitoring_file_for_jim\ABCDFIX*%targetDate%.log
::****Scrapped original approach*****
set "ackFoundCount=0"
set "reqFoundCount=0"
::Get lines with acks
for /f delims^=^ eol^= %%a in ('findstr /c:"\<ACK\>" "%ABCDLogsFile%"') do (
set /a "ackFoundCount+=1"
setlocal enabledelayedexpansion
for %%N in (!ackFoundCount!) do (
endlocal
set "ackFound%%N=%%a"
)
)
::Get lines with requests
for /f delims^=^ eol^= %%b in ('findstr /c:"ReqSingle" "%ABCDLogsFile%"') do (
set /a "reqFoundCount+=1"
setlocal enabledelayedexpansion
for %%N in (!reqFoundCount!) do (
endlocal
set "reqFound%%N=%%b"
)
)
setlocal enabledelayedexpansion
for /l %%N in (1,1,2 %reqFoundCount%) do echo REQ %%N FOUND= !reqFound%%N!
pause
for /l %%N in (1,1,2 %ackFoundCount%) do echo ACK %%N FOUND= !ackfound%%N!
endlocal
EDIT 2 dbenham
окольным путем я пытался сделать это, прежде чем было совершенно ненужным. Благодаря вопросы и ответить здесь:
'findstr' with multiple search results (BATCH)
У меня есть мой сценарий работает аналогичным образом. Тем не менее, мне любопытно, можно ли получить вывод findstr без пути к файлу в начале. Мне нужно только подстроить метку времени в журнале, которая всегда будет первым 12 символами каждой строки (без пути к файлу). Мой выход в настоящий момент имеет префикс пути, и, хотя я мог бы получить путь, где журнал в конечном итоге будет в производстве, было бы безопаснее попробовать и сделать это по-другому. В то время, когда этот скрипт будет запущен, будет только 1 или 2 reqs и каждый из них, поэтому я сохраняю все найденные. Это не обязательно, но я думаю, было бы обнадеживающим увидеть два, если их два. Вот то, что результат выглядит для квитанций и Reqs так:
C:\Users\me\Documents\monitoring_file_for_jim\ABCDFIX 2015-04-01.log:2015-03-26 07:00:11,028 INFO etc...
Я думаю, что если бы я мог лишить FilePath от начала, то все, что я должен был бы сделать, чтобы получить только метки времени от событий будет
for /l %%N in (1,1,1 %reqFoundCount%) do echo Req %%N occurred at: !reqFound%%N:~0,12! >> MorningAckChecks.txt
for /l %%N in (1,1,1 %ackFoundCount%) do echo ACK %%N occurred at: !ackfound%%N:~0,12! >> MorningAckChecks.txt
> «Я пытался использовать for/f с этими переменными в качестве параметров для пропустить и захватить эти строки, но я не могу сделать это правильно». Также опубликуйте этот код. –
Извините. – driftandwander
не легко использовать powershell! просто 'Select-String -Pattern" stack -List -SimpleMatch -Path F: \ Andorid \ Andorid.vmx | выберите «Линия», «Линейный номер», вы можете легко совместить линию с вашим рисунком и простыней! – powershell