次のスクリプトはどうですか? 事前定義された時刻とログファイルは、それぞれ "pretime"と "logfile"で設定できます。ログファイルから "Billy"が検索されます。そして差の時間が出力されます。 「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
日付/時刻の数学では、Windows 'cmd' /バッチにネイティブではありません。 PowerShell、VBScript、またはJavaScriptのような、Windowsにネイティブであり、真の日付/時刻算術演算が可能な別の言語を使用することを提案しましょう。 – aschipfl