其他问题总是指当前时间,但我需要脚本根据日志文件中某个字符串中的时间值执行某些操作。
日志文件包含以下格式的行:
比利 - 13:42:14我需要批处理文件来计算自预定义时间(例如13:00:00)以来经过的时间量。所以在这种情况下,输出将是00:42:14。
如何让脚本找到包含" Billy"的字符串?但是然后看一下并分析线末的时间值来实现上述目的。
提前致谢。
答案 0 :(得分:0)
以下脚本怎么样? 预定义的时间和日志文件可分别由“pretime”和“logfile”设置。从日志文件中搜索“Billy”。并且输出差异时间。即使有一些行包括“比利”,它也得到了回复。
日志文件:
aBilly - 13:42:14
Billy - 13:42:14
cBilly - 13:42:14
Billy - 13:13:14
dBilly - 13:42:14
脚本:
@echo off
setlocal enabledelayedexpansion
set pretime=13:00:00
set logfile=sample.log
call :timetosec %pretime%
set pretime=!sec!
for /f "tokens=1-3 delims= " %%i in (%logfile%) do (
if %%i==Billy (
call :timetosec %%k
set /a d=!sec!-%pretime%
call :sectotime %d%
echo !outtime!
)
)
goto :EOF
:timetosec
set t=%1
set /a h=%t:~0,2%*3600
set /a m=%t:~3,2%*60
set s=%t:~6,2%
set /a sec=%h%+%m%+%s%
goto :EOF
:sectotime
set /a m=%d%/60
set /a s=%d%-(%m%*60)
set /a h=%m%/60
set /a m=%m%-(%h%*60)
if %h% lss 10 set h=0%h%
if %m% lss 10 set m=0%m%
if %s% lss 10 set s=0%s%
set outtime=%h%:%m%:%s%
goto :EOF
输出:
00:42:14
00:13:14