我有.log文件的文件夹,其中每个文件的内容都有以下格式的多行:
yyyy/mm/dd, hh:mm:ss, ComputerName, IPAddress, stuff, stuff
我想创建一个批处理文件来解析.log文件,并为ComputerName以“XPLT”开头的文件中的任何行创建以下输出:
filename,yyyy/mm/dd,ComputerName,IPAddress
最好是,我只想查看过去30天内修改日期的文件。
到目前为止,我只获得了以下代码甚至不起作用,甚至没有包含文件修改日期和ComputerName解析。寻求帮助因为我没有这么做,我在网上找不到一个好的例子。
Echo EID,Date,PCName,IPAdd>CitrixLogs.csv
setlocal enabledelayedexpansion
for /f "tokens=1,3,4" %%i in ('dir /b "C:\LogFiles\*.log"') do (
echo %%i,%%j,%%k,%%l>>CitrixLogs.csv
)
答案 0 :(得分:0)
我使用了一点FINDSTR
魔法:
set LOG_DIR=c:\logfiles
for /f "tokens=1-7 delims=:," %%L in ('%SystemRoot%\System32\findstr.exe /r /c:"^[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9],[0-9][0-9]:[0-9][0-9]:[0-9][0-9],xplt.*," %LOG_DIR%\*.log') do @echo %%L,%%M,%%N:%%O:%%P,%%Q,%%R,
`
答案 1 :(得分:0)
REM
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "tokens=2-8delims=:, " %%a IN ('findstr /l /i /c:", XPLT" "%sourcedir%\*.log"') DO (
ECHO %%~nxa,%%b,%%c:%%d:%%e,%%f,%%g
)
GOTO :eof
重定向到您的.csv
,因为您将...
答案 2 :(得分:0)
@echo off
setlocal enableextensions disabledelayedexpansion
:: configuration
set "logFolder=%cd%"
set "logFiles=*.log"
set "maxFileAge=30"
set "computerName=XPLT"
set "outputFile=CitrixLogs.csv"
:: adjust commands to execute according to configuration
set "ageFilter=robocopy "%logFolder%" "%logFolder%" "%logFiles%" /l /is /njh /njs /nc /ns /ndl /maxage:%maxFileAge%"
set "contentFilter=findstr /f:/ /i /r /c:"^^[^^,]*, [^^,]*, %computerName%" "
:: Generate output file
( echo(EID,Date,PCName,IPAdd
for /f "usebackq tokens=2,* delims=:" %%a in (
`cmd /q /c "for /f tokens^=* %%a in ('%ageFilter%') do echo(%%a" ^| %contentFilter% `
) do for /f "tokens=1,3,4 delims=," %%c in ("%%b") do echo(%%~nxa,%%c,%%d,%%e
) > "%outputFile%"
endlocal
这将使用robocopy
(或您可以使用forfiles
进行更改)以在指定的文件夹中搜索最长30天的文件。不会复制文件(/l
),但会回显列表(交换机的其余部分配置输出)。此文件列表通过管道传输到findstr
(/f:/
),指示在何处搜索与指示条件匹配的行。这将生成输出,输入文件中的每一行都与条件匹配,前缀为文件的名称(全名)。然后将该行拆分为仅输出所需的字段。