Batch File显示文件名,然后显示文件中的某些行



我有一个.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
)

我会使用一点FINDSTR魔法:

set LOG_DIR=c:logfiles
for /f "tokens=1-7 delims=:," %%L in ('%SystemRoot%System32findstr.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,

`

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。。。

@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:/(中,指示在哪里搜索与指示条件匹配的行。这将生成一个输出,其中输入文件中的每一行都与条件匹配,并以文件的名称(全名(为前缀。然后将这一行拆分为仅输出所需的字段。

最新更新