目标是搜索扩展名为.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
答案 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
我不确定令牌是否正确,因为您没有显示预期的输出,但是可以轻松地使它们适应您的需求。