在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这个是脚本代码[保存为etime.bat放在当前路径下即可: 复制代码 代码如下: :etime <begin_time> <end_time> <return> rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版 setlocal&set be=%~1:%~2&set cc=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%c&set dy=-8640000 for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%*("%3>>31")&exit/b 计算两个时间点差的函数批处理etime 今天兴趣大法思考了好多bat的问题,以至于通宵 复制代码 代码如下: :time0 ::计算时间差(封装) @echo off&setlocal&set /a n=0&rem code 随风 @bbs.bathome.cn for /f "tokens=1-8 delims=.: " %%a in ("%~1:%~2") do ( set /a n+=10%%a%%100*360000+10%%b%%100*6000+10%%c%%100*100+10%%d%%100 set /a n-=10%%e%%100*360000+10%%f%%100*6000+10%%g%%100*100+10%%h%%100) set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100 set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒" endlocal&set %~3=%ok:-=%&goto :EOF 这个代码的算法是统一找时间点凌晨0:00:00.00然后计算任何一个时间点到凌晨的时间差(单位跑秒) 复制代码 代码如下: @echo off&setlocal&set/a n=0&set "s=+:%~1^&echo -:%~2" for /f "tokens=1-5 delims=.:" %%a in ('echo %s%') do (rem code 随风 @bbs.bathome.cn set/a n%%a=10%%b%%100*360000+10%%c%%100*6000+10%%d%%100*100+10%%e%%100) set /a s=n/360000,n=n%%360000,f=n/6000,n=n%%6000,m=n/100,n=n%%100 set "ok=%s% 小时 %f% 分钟 %m% 秒 %n% 毫秒" endlocal&(if %3. equ . (echo %ok:-=%) else set %~3=%ok:-=%)&exit/b 再研究下,有更简短的版本 复制代码 代码如下: rem 兼容时间点跨天的情行,时间格式00:00:00.00 或者 0:00:00.00 皆可 :_difftime <Begin_Time> <End_Time> [ret] //返回两个时间点的差值(单位0.01秒) Setlocal enabledelayedexpansion&set b=0%1&set e=0%2&set c=1!e:~-11!-1!b:~-11!&set c=!c::=! set/a c=%c:.=%-4000*(160*(1%e:~-11,-9%-1%b:~-11,-9%)+1%e:~-8,-6%-1%b:~-8,-6%) endlocal & (if %3.==. (echo %c:-=8640000-%) else set/a %3=%c:-=8640000-%)&exit/b 给difftime前面加上_是为了表明不是临时写的子过程也为了以后连接库函数标签的唯一性 // 题外话: |
请发表评论