批处理脚本将.rej转换为CSV,以解析有用的数据

时间:2019-04-04 13:41:48

标签: powershell batch-file

目标是搜索扩展名为.rej的多个文件,因此我拥有一个可以轻松显示该信息的文件。

所以我朝一个完全不同的方向使用CSV,因为我需要的信息每行只有3个字符串。

@echo off
setlocal enabledelayedexpansion
For %%I in (*.rej) do (
    (for /f "delims==" %%A in (%%I) do set string=%%A & echo !string::=,!) >> %%~nI_Tempout.tmp
    (for /f "delims==" %%A in (%%~nI_Tempout.tmp) do set string=%%A & echo !string:[=,!) >> %%~nI_Tempout1.tmp
    (for /f "delims=" %%A in (%%~nI_Tempout1.tmp) do Call :Split %%A ) > %%~nI_New.csv)
    goto :Eof
    :Split
@echo(%1,%9,%11
del *.tmp

File.rej

12.13.14 [-]  [20190304][ VBTS 0 ] REJECTED:IM:2q1231231123124:II:123123123123:TM:1278391237912379128379:CAUSES:
12.13.16 [-]  [20190304][ VBTS 0 ] REJECTED:IM:2q1231231123124:II:123123123123:TM:1278391237912379128379:CAUSES:
12.13.20 [-]  [20190304][ VBTS 0 ] REJECTED:IM:2q1231231123124:II:123123123123:TM:1278391237912379128379:CAUSES:

但是%11最终会在%1上打印出1, 我只能假定它检测到%1回声是下一个1

输出

12.13.14,2q1231231123124,12.13.141
12.13.16,2q1231231123124,12.13.161
12.13.20,2q1231231123124,12.13.201

最终代码

@echo off
setlocal enabledelayedexpansion
For %%I in (*.rej) do (
    (for /f "delims==" %%A in (%%I) do set string=%%A & echo !string::=,!) >> %%~nI_Tempout.tmp
    (for /f "delims==" %%A in (%%~nI_Tempout.tmp) do set string=%%A & echo !string:[=,!) >> %%~nI_Tempout1.tmp
    (for /f "tokens=1,8,10 delims=," %%A in (%%~nI_Tempout1.tmp) do Call :Split %%A %%B %%C ) > %%~nI_New.csv)
    goto :Eof
    :Split
@echo(%1,%2,%3
del *.tmp

1 个答案:

答案 0 :(得分:0)

您将数据解析为临时文件,第二次解析为第二个临时文件,第三次解析为临时文件。那是低效的。选择令牌并明智地精简时,只需一个for /f循环就可以完成所有操作:

(for /f "tokens=1,7,11 delims=[-]: " %%A in ('type *.rej 2^>nul') do echo %%A,%%B,%%C)>file_New.csv

我不确定令牌是否正确,因为您没有显示预期的输出,但是可以轻松地使它们适应您的需求。