Windows批處理腳本計算外部程序消耗的時長

引言

很少寫Windows下的批處理命令腳本,既然遇到了它的用法,就先記下來吧,供自己和大家參考。沒啥技術含量,直接上代碼。


簡單直接的腳本

@echo off
set /a StartS=%time:~6,2% 
set /a StartM=%time:~3,2%
set /a startH=%time:~0,2%
echo 開始時間:%time%

ping 192.168.1.1 

set /a EndS=%time:~6,2% 
set /a EndM=%time:~3,2% 
set /a EndH=%time:~0,2%
echo 結束時間:%time%

set /a  diffS_=%EndS%-%StartS%
set /a  diffM_=%EndM%-%StartM%
set /a  diffH_=%EndH%-%StartH%

set /a cost=%diffH_%*3600 + %diffM_%*60 + %diffs_%
echo 總共花費時間 : %cost% 秒


注: 以上腳本沒有進行前綴含有“0”的處理,對於某些特殊的時間,計算結果會出錯。

通過調用函數實現的腳本

@echo off
set logfile="ping.log"
set output="yes"

set cmd="ping 192.168.1.1 -n 10"
call :execute %cmd%

:execute
if "%~1" == "" (goto :eof)
echo =============================================================================== >>%logfile%
echo ===============================================================================
set /a StartX=1%time:~9,2%%%100
set /a StartS=1%time:~6,2%%%100 
set /a StartM=1%time:~3,2%%%100
set /a startH=10%time:~0,2%%%100
echo #Start Time: %date% %time% >>%logfile%
echo #Start Time: %date% %time%

echo #Command: %~1 >>%logfile%
echo #Command: %~1 
if %output% == "yes" (%~1 >>%logfile% 2>&1) else %~1

set /a EndX=1%time:~9,2%%%100
set /a EndS=1%time:~6,2%%%100 
set /a EndM=1%time:~3,2%%%100 
set /a EndH=10%time:~0,2%%%100
echo #Finish Time: %date% %time% >>%logfile%
echo #Finish Time: %date% %time% 

set /a  diffX_=10%EndX% %% 100-10%StartX% %% 100
set /a  diffS_=10%EndS% %% 100-10%StartS% %% 100
set /a  diffM_=10%EndM% %% 100-10%StartM% %% 100
set /a  diffH_=10%EndH% %% 100-10%StartH% %% 100

if %diffH_% lss 0 (set /a diffH_=%diffH_%+24)
if %diffX_% lss 0 (
set /a diffX_=%diffX_%+100
set /a diffS_=%diffS_% - 1)

set /a cost=%diffH_%*3600 + %diffM_%*60 + %diffs_%

if %diffX_% lss 10 (
echo #Cost Time: %cost%.0%diffX_% seconds >>%logfile%
echo #Cost Time: %cost%.0%diffX_% seconds) else (
echo #Cost Time: %cost%.%diffX_% seconds >>%logfile%
echo #Cost Time: %cost%.%diffX_% seconds)
echo =============================================================================== >>%logfile%
echo ===============================================================================
goto :eof


該腳本將計算精確到毫秒,解決前綴包含0的問題,同時將計算的信息打印到屏幕和輸出到日誌文件中。通過設置 “output”變量,可以將調用的命令輸出也記錄到日誌文件中 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章