
計算兩個時間點差的函數批處理etime最后由 plp626 于 -5-19 10:50上面的那個算法復雜,代碼實現也不是很精簡,下面的代碼皆用如下算法etime=([h2,m2,swf2]-[h1,m1,swf1])*[360000;6000;1]// 這里的*表示兩個向量的矩陣乘法,如果還不是很理解請看14樓思考了下跨天時間的情行:首先因為沒有日期參與運算,參數必須規定順序【否則會出現混亂】,比如規定開始時間在前,結束時間在后,然后我們分析兩個時間點不在一天的情行,我們使用這個代碼【這個代碼也是批處理寫的】只為了測試批處理任務的運行時間,或者借助批處理測試一些任務的花費時間,這一點勿容置疑那么有什么批處理的運行時間會超過一天?沒有,如果有,那么一定是毫無意義的批處理!//關于此,后面還有個偷工減料的代碼那么在保證開始時間在前,結束時間在后,出現跨天的兩個時間點,雖然時間差是負數,但是只要給這個負數再加上1天的時間就能正確表示這兩個時間點的差,所以就出現了 -8640000*(c>>31) 這樣的代碼以下代碼經過本人多次測試,皆兼容跨天情形,只要所執行的任務不超過時限,都能正確計算!大家根據個人喜好選擇代碼風格
如果僅是用于測試一般的bat代碼運行時間,推薦:etMnclick="copycode($('code0'));">復制代碼
- :: etime -- 求%1--%2 的時間差,時間跨度在24小時內可調用之;
- :etime <beginTimeVar> <endTimeVar> <retVar> // code by plp626
- if !OS! neq %OS% (echo %0 需要再開啟變量延遲后調用&goto:eof)
- Set/a %3=(!%2:~,2!-!%1:~,2!)*360000+(1!%2:~3,2!-1!%1:~3,2!)*6000+1!%2:~-5,2!!%2:~-2!-1!%1:~-5,2!!%1:~-2!,%3+=-8640000*(%3>>31)&goto:eof
附注:如何讀子過程上的參數標簽選項比如說:etime <begin_time> <end_time> [return]:etime 就是子過程的標簽后面的 begin_time end_time 是對參數要求的描述,即第一個參數是開始時間,第二個參數是結束時間return 就是接收返回值的參數,//用return單詞,它只是為了可讀性<> 表示該參數不能缺省(必選的意思)[]表示該參數可以缺省[ 最后由 plp626 于 2009-10-10 13:17]nclick="copycode($('code1'));">復制代碼
- :: etM --求 %1--%2 時間差,時間跨度在1分鐘內可調用之;用于測試一般bat運行時間
- :etM <beginTimeVar> <endTimeVar> <retVar> // code by plp626
- setlocal enabledelayedexpansion
- set/a c=1!%2:~-5,2!!%2:~-2!-1!%1:~-5,2!!%1:~-2!,c+=-6000*(c>>31)
- (endlocal&if %3.==. (echo %c%) else set %3=%c%)&goto:eof

