我有一個日誌文件,用於監視包括請求和確認在內的大型系統。我的目標是能夠:批處理腳本來抓取linestr而不使用文件路徑
1.遍歷腳本,並獲得其中要求&它們的確認發生
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個請求和答案,這就是爲什麼我存儲所有被發現的。這不是必要的,但我認爲如果有兩個是兩個,那麼看到兩個就會讓人放心。下面是輸出看起來像ACK和請求數一樣東西:
C:\Users\me\Documents\monitoring_file_for_jim\ABCDFIX 2015-04-01.log:2015-03-26 07:00:11,028 INFO etc...
我在想,如果我能剝離掉的文件路徑的開始,然後所有我需要做的就是只是時間戳的事件將是
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,並抓住這些行,但我似乎無法正確地做到這一點。」 - 請張貼此代碼。 – 2015-03-31 19:07:13
對不起。 – driftandwander 2015-03-31 19:29:43
不容易使用powershell!只是'Select-String -Pattern「stack」-List -SimpleMatch -Path F:\ Andorid \ Andorid.vmx |選擇Line,LineNumber',你可以得到線條與你的圖案相匹配,並且非常簡單! – powershell 2015-03-31 22:06:21