批处理文件显示文件名,然后显示文件中的某些行

时间:2014-06-12 20:44:09

标签: date 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
)

3 个答案:

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