이것은 내 첫 번째 게시이므로 형식이 아닌 경우이 사실을 알려주세요. (배치 파일 : 로그 파일의 마지막 줄을 읽고 새 파일에 복사합니다.
개선을위한 제안을 환영합니다.) 나는 로그 파일에서 마지막 줄을 읽고 그들을 새 파일로 복사하는 배치 파일을 만들려고하고
.
지금까지 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 파일에 복사하는 방법을 알고 있습니다.
=== @ 마구 : 고맙습니다. 모든 로그 파일에는 쉼표로 구분 된 정보가있는 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가 제공 한 솔루션을 시도했습니다. 불행히도 이것은 아직 나를 위해 작동하지 않습니다. 마지막 줄은 결과 파일에 복사되지 않습니다. 코드에서 로그에 빈 행이 없기 때문에 가능한 lastlines에 대한 추가 항목을 제거했으며, 결과에서 사용할 수 있도록하려는 호스트 이름에 대한 항목도 추가했습니다. 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 번째 입장"은 무엇입니까? 로그 파일의 각 줄과 마지막 줄 전체에서 "네 번째 항목"을 원하십니까? "delims"는 "구분 기호가."또는 "t"또는 "x"또는 ","또는 "space" "- delims"는 문자열이 아니라 문자 집합임을 의미합니다. 질문을 편집하고 추출 할 데이터를 명시하여 예제 라인을 보여주십시오. – Magoo