2011-04-01 30 views
4

所以簡而言之,我的腳本當前輸出帶有日誌名稱,時間戳(10:38:52)和消息(Verification:SUCCESS和SendResponse:Response消息)的csv。批處理文件中的平均時間戳

我現在需要的腳本能夠計算並輸出第一條消息的時間戳和第二條消息的時間戳之間的時間差,並在csv的底部提供一個平均值。

@echo off 
setlocal EnableDelayedExpansion 
echo."Location","Date Time","Result","diff" > output2.csv 
( 
    for %%a in (z:\logdir\*.log) do (
    for /f "tokens=1,2,3,4,5,6,7,8,9,10 delims=[+]" %%B in ('findstr /g:searchstrings.txt ^< %%a') do (
     set var=%%B 
     set var1=!var:~-6! 
     echo."%%a","!var1!","%%B","%%F","timetaken" 
    ) 
) 
) >> output2.csv 

日誌文件中包含很多項目,但這個腳本應該和不拔出只是

[20110314T103852][EMVLib][5056][I000000]: Verification: SUCCESS 

[20110314T103902][CSV][3232][D000000]: SendResponse: Response message 

這些搜索字符串由文件searchstrings.txt定義以下行

感謝您的幫助在這!

+0

你只能使用'.cmd'腳本? – Mat 2011-04-01 15:21:15

回答

1

PA的代碼顯示的想法,但因爲它是一批有:-)

沒有簡單的解決方案的getTime功能將一天的時間戳的14%會失敗。
爲什麼?由於批處理以前導零作爲八進制數的所有數字,因此08和09不會轉換爲8或9,它只會失敗。

存在一個解決方法,前綴a 1並僅使用餘數。
set /a "hh=1!var:0,2! %% 100"
08 - >108 MOD 100 - > 8

所以整批可能看起來像

@echo off 
setlocal EnableDelayedExpansion 
@echo off 
setlocal EnableDelayedExpansion 
echo."Location","Date Time","Result" > output2.csv 
set totalVerifyTime=0 
set totalVerifyCount=0 
( 
    for %%a in (n.txt) do (
    for /f "tokens=1,5 delims=[+]" %%B in (%%a) do (
     set timefield=%%B 
     set timestamp=!timefield:~-6! 
     set /a "seconds=1!timestamp:~-2!%%100 + (1!timestamp:~0,2!%%100 * 60 + 1!timestamp:~2,2!%%100) * 60" 
     if "%%C"==": Verification: SUCCESS" (
     set verifyStart=!seconds! 
     echo."%%a","!timestamp!","%%B","%%C", "!seconds!", "start of verify" 
    ) ELSE (
     set /a diff=seconds - verifyStart 
     echo."%%a","!timestamp!","%%B","%%C", "!seconds!", "!diff!" 
     set /a totalVerifyTime+=diff 
     set /a totalVerifyCount+=1 
    ) 

    ) 
) 
) 
set /a "totalAvg=totalVerifyTime/totalVerifyCount" 
echo avg = !totalAvg! 
+0

+1,但我不能接受你的答案 – 2011-04-01 20:54:43

+0

@PA:謝謝,但我的解決方案失敗了嗎? – jeb 2011-04-01 21:38:36

+0

完全沒有失敗。我不能接受它,因爲我不是OP。如果我是我會的。 – 2011-04-02 18:59:45

2

你必須解析時間戳並計算秒數等時間值。

此代碼,假設這種格式20110314T103852%1傳遞的字符串,返回的時間價值%2

編輯:我發現,你不能直接把這個字符串,所以我已經修改了代碼

:gettime 
set hh=!%1:~9,2! 
set mm=!%1:~11,2! 
set ss=!%1:~13,2! 
set /A %2=hh*3600+mm*60+ss 
goto :eof 

然後您可以用它來計算這樣

set t=%%a 
call :gettime t t1 
... 
set t=%%a 
call :gettime t t2 
set /A deltat=t2-t1 
時差

有關此處所用命令的更詳細描述,請參閱HELP SETHELP CALL信息。

相關問題