這是我的第一篇文章,所以如果格式不符合它的原因,請原諒我。 (對於Batchfile:從日誌文件中讀取最後一行並將它們複製到一個新文件
改進建議,歡迎。)
我想創建一個批處理文件,將讀取日誌文件的最後幾行,並將它們複製到一個新的文件。
直到現在,我發現here一種方式來讀取最後一行。
代碼會是這樣的:
for /f %%i in ('find /v /c "" ^< someFile.txt') do set /a lines=%%i
set /a startLine=%lines% - 1
more /e +%startLine% someFile.txt > lastLines.txt
上面的代碼適用於一個文件的時間。我需要的是讀取已知列表中所有文件的最後一行,並將此行添加到新的.csv文件中。
我一直在使用下面的代碼用於獲取日誌文件中的第4個條目,但它返回每個日誌文件的每一行:
for /f %%x in (%list%) do for /f "delims=.txt, tokens=4" %%i in (%%x.txt) do echo %%x, %%i >> output.csv
什麼我需要是一種兩者結合的,但我不不知道如何合併它們,並將完整的最後一行復制到.csv文件中。
=== @Magoo: Thanx爲您的反應。 在每個日誌文件中可以用1到> 100行用逗號分隔信息。例如:
"LOGON,6-1-2015,12:43:39,USERNAME,HOSTNAME,,,,192.168.209.242,00:21:5A:2E:64:5E"
第4個條目的最後一個代碼用於獲取已登錄到計算機的所有帳戶的列表。這段代碼給了我所有在%list%中檢查過的計算機日誌上的所有登錄/註銷事件的列表。 在%list $中,我有我想要檢查的所有日誌文件的名稱。這返回所有行。
對於新的批處理文件,我只需要最後一次登錄/註銷條目,我希望整個最後一行。
所以我有一個.txt文件,我需要檢查所有計算機的主機名。 這個.txt文件將通過變量%list%逐行讀取。
從每個日誌文件我只需要最後一行復制到輸出文件。
=== 我剛試過由JosefZ提供的解決方案。不幸的是,這並不適用於我。沒有最後一行被複制到結果文件。在代碼中,我刪除了可能的最後一行的額外條目,因爲日誌中沒有空行,我還添加了一個條目用於我希望在結果中可用的主機名。 JosefZ的文件名爲:
@ECHO OFF >NUL
@SETLOCAL enableextensions disabledelayedexpansion
type nul>output.csv
set "list=_listing.txt"
for /F "tokens=*" %%x in ('type "%list%"') do (
set "host=%%~x"
for /F "tokens=*" %%G in ('type "%%~x"') do set "lastline=%%G"
call :lline
)
:endlocal
@ENDLOCAL
goto :eof
:lline
set "filename=.\logs\%filename:&=^&%.txt"
echo %host%,%lastline%>>output.csv
goto :eof
結果文件只顯示主機名。我會更多地瞭解這一點,但所有的提示都歡迎!
=== 明白了!
@ECHO OFF >NUL
@SETLOCAL enableextensions disabledelayedexpansion
type nul>output.csv
set "list=_listing.txt"
for /F "tokens=*" %%x in ('type "%list%"') do (
set filename= :: *empty previous filename*
set lastline= :: *empty previous lastline*
set "host=%%~x"
set "filename=.\logs\%host%.txt" :: *creating the filename from path+hostname+extention*
for /F "tokens=*" %%G in ('type "%filename%"') do set "lastline=%%G"
call :lline
)
:endlocal
@ENDLOCAL
goto :eof
:lline
echo %host%,%lastline%>>output.csv
goto :eof
因此 - 對於列表中的每個文件名,您想要什麼信息?這是什麼「第4項?」你想從日誌文件的每一行加上整個最後一行的「第4項」?你知道你的「delims」規範意思是「分隔符是'''或't'或'x'或','或'space'」 - 'delims'是一組字符,而不是一個字符串。向我們展示一個示例行,將其編輯到您的問題中,並說明您要提取哪些數據。 – Magoo