2017-01-20 13 views
0

他の質問は常に現在の時刻を参照していますが、ログファイルの特定の文字列の時間値に基づいて何かをするスクリプトが必要です。ログファイルの時刻に基づいてファイルコマンドをバッチしますか?

ログファイルがこの形式の行が含まれています。

ビリー - 午後一時42分14秒

私が事前に定義された時間(例から経過した時間の量を計算するために、バッチファイルを必要とする13。 :00:00)。この場合、出力は00:42:14になります。

"Billy"を含む文字列を検索するスクリプトを取得するには、どうすればよいのですか?上記を達成するために、行末の時間値を調べて分析します。

ありがとうございます。

+0

日付/時刻の数学では、Windows 'cmd' /バッチにネイティブではありません。 PowerShell、VBScript、またはJavaScriptのような、Windowsにネイティブであり、真の日付/時刻算術演算が可能な別の言語を使用することを提案しましょう。 – aschipfl

答えて

0

次のスクリプトはどうですか? 事前定義された時刻とログファイルは、それぞれ "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 
+0

ありがとうございました!本当にあなたの時間を感謝:) –

関連する問題