提取时间范围模式内的文件字符串数据

问题描述 投票:0回答:1

我正在尝试从输入日志文件中提取特定时间范围内的数据。

输入文件,具有以下模式:

2023-01-31 00:00:21.354 FINE AS2SenderModule: Message sent and response received in 438 millisecondsms 
2023-01-31 01:00:21.352 FINE AS2SenderModule: Message sent and response received in 479 millisecondsms 
2023-01-31 09:00:23.368 FINE AS2SenderModule: Message sent and response received in 443 millisecondsms 
2023-01-31 13:00:24.857 FINE AS2SenderModule: Message sent and response received in 393 millisecondsms 
2023-01-31 14:00:26.758 FINE AS2SenderModule: Message sent and response received in 734 millisecondsms 

我尝试了以下方法,但都存在某些问题。

set /p start_time=Enter start time (HH:MM:SS):
set /p end_time=Enter end time (HH:MM:SS):
findstr /r "%start_time%.*%end_time%" input.txt > output.txt

这没有用,它返回了一个空的输出文件。

实际上有效的其他解决方法对我没有好处。它不是动态的,需要用户输入,并且只适用于相同的范围模式。如果用户输入像

08:00:00
13:00:00
怎么办?

for /f "tokens=11 delims= " %%a in ('findstr " 1[3-4]:[0-5][0-9]:[0-5][0-9] " input.txt ^| findstr /r /c:"millisecondsms"') do @echo %%a>> output.txt

范围可以是

00:00:00
23:59:59
之间的任何值。

请建议一个方法。

batch-file cmd fileparsing
1个回答
0
投票
@ECHO OFF
SETLOCAL

:: fixed start/end times for ease of testing

SET "start_time=09:00:23"
SET "end_time=13:00:25"

(
FOR /f "usebackqtokens=1,2,*delims=. " %%g IN ("q75568748.txt") DO IF "%%h" geq "%start_time%" (
 IF "%%h" gtr "%end_time%" GOTO done
 ECHO %%g %%h.%%i
)
)>"u:\sel.txt"

:done
GOTO :EOF

我使用了适合我的系统的固定时间和文件名。

这一切都围绕着使用 .Space 对每条数据线进行标记。第一个空格之前的部分分配给

%%g
,空格和点之间的部分分配给
%%h
,其余部分分配给
%%i
(请参阅提示中的
for /?
,或有关SO的许多文章以获取文档)

然后测试

%%h
是否大于或等于开始时间,然后再次测试是否大于结束时间,如果时间在结束时间之后则快速退出。

© www.soinside.com 2019 - 2024. All rights reserved.