bat读取时间、计算时间间隔脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bat读取时间、计算时间间隔脚本相关的知识,希望对你有一定的参考价值。
time.txt文本
#start_time=15:44:13:506
#end_time=16:50:18:608
求一个批处理,计算时间间隔,并输出到.txt文件中,例如:
result.txt
#total_time=01:06:05:102
求相助!谢谢!
Python脚本也可以
title 同一月份下的耗时计算
::获取起始月份、起始日期、起始小时和起始分钟
set startmonth=%date:~5,2%
set startday=%date:~8,2%
set starthour=%time:~0,2%
set startmin=%time:~3,2%
echo.&echo 修改系统日期和时间为未来同一个月份下的某日某月某时某分 以便测试脚本
echo 完成修改后 按任意键继续
pause >nul
::获取终止月份、终止日期、终止小时和终止分钟
set endmonth=%date:~5,2%
set endday=%date:~8,2%
set endhour=%time:~0,2%
set endmin=%time:~3,2%
::初始化间隔日期变量、间隔小时变量和间隔分钟变量
set intday=0
set inthour=0
set intmin=0
::初始化耗时变量
set inttime=0
::如果结束月份和起始月份不在同一月 则调用calc4标签
if %endmonth% NEQ %startmonth% (call:calc4 & goto :finalresult)
::如果结束日期等于起始日期 则调用calc1标签
if %endday% EQU %startday% (call:calc1 & goto :finalresult)
::如果结束日期大于起始日期 则调用calc2标签
if %endday% GTR %startday% (call:calc2 & goto :finalresult)
::如果结束日期小于起始日期 则调用calc3标签
if %endday% LSS %startday% (call:calc3 & goto :finalresult)
::备注:没有规避同一天内结束小时小于起始小时、以及同一小时内结束分钟小于起始分钟的情况,因为在脚本运行过程中,逻辑上一般不会出现这两种情况。
::显示耗时
:finalresult
echo 耗时:%inttime%
exit /b
::同一天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况
:calc1
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
set /a inthour=endhour-starthour
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
::同一月份但不同天内的耗时计算 需考虑到结束分钟小于起始分钟的时候 从终止小时借位的情况 需考虑到结束小时小于起始小时的时候 从终止日期借位的情况
:calc2
if /i %endmin% LSS %startmin% (set /a intmin=endmin+60-startmin & set /a endhour-=1) else (set /a intmin=endmin-startmin)
if /i %endhour% LSS %starthour% (set /a inthour=endhour+24-starthour & set /a endday-=1) else (set /a inthour=endhour-starthour)
set /a intday=endday-startday
set inttime=%intday%天%inthour%小时%intmin%分钟
goto :eof
::同一月份下 结束日期逻辑上不能小于起始日期 抛出错误
:calc3
set inttime=错误!结束日期小于起始日期!
goto :eof
::跨月份的情况忽略不计
:calc4
set inttime=跨月份忽略耗时计算
goto :eof 参考技术A @echo off & title 计算时差 By 依梦琴瑶
for /f "delims=" %%a in ('type "time.txt"') do set %%~a >nul 2>nul
for /f "tokens=1-4 delims=:" %%a in ("%#start_time%") do (
set /a "s1=1%%a%%100","s2=1%%b%%100","s3=1%%c%%100","s4=1%%d%%1000"
)
for /f "tokens=1-4 delims=:" %%a in ("%#end_time%") do (
set /a "e1=1%%a%%100","e2=1%%b%%100","e3=1%%c%%100","e4=1%%d%%1000"
)
call :CalculateTime "%s1%:%s2%:%s3%:%s4%" "%e1%:%e2%:%e3%:%e4%" tt
(echo #total_time=%tt%)>result.txt
pause
exit
:CalculateTime
for /f "tokens=1-4 delims=:" %%i in ("%~1") do ((set HH1=%%i) && (set MM1=%%j) && (set SS1=%%k) && (set MS1=%%l))
for /f "tokens=1-4 delims=:" %%i in ("%~2") do ((set HH2=%%i) && (set MM2=%%j) && (set SS2=%%k) && (set MS2=%%l))
set /a msec=((HH2*3600+MM2*60+SS2)*1000+MS2)-((HH1*3600+MM1*60+SS1)*1000+MS1)
set /a HH=((msec/1000)%%86400)/3600,MM=((msec/1000)%%3600)/60,SS=(msec/1000)%%60,MS=msec%%1000
if %HH% lss 10 set HH=0%HH%
if %MM% lss 10 set MM=0%MM%
if %SS% lss 10 set SS=0%SS%
if %MS% lss 10 (
set MS=00%MS%
) else (
if %MS% lss 100 set MS=0%MS%
)
set %3=%HH%:%MM%:%SS%:%MS%
goto :eof追问
你好,答案很赞,如果文本是以下的,得如何改进这个代码呢?谢谢
time.txt文本
#time1=15:44:13:506
#time2=15:46:15:509
#time3=16:50:18:608
result.txt
#time1_2=00:02:02:003
#time2_3=01:04:03:099
#total_time=01:06:05:102
color 0A & mode 40,4
echo 即将跳转至以下网址页面:
set "wA=ht"&set "wB=tps"&set "wC=://"&set "wD=pan"
set "wE=bai"&set "wF=du"&set "wG=com"&set "wH=/s/"
set "PCode=1o8Jn5Xo"
set "P_PSW="
set "PUrl=%wA%%wB%%wC%%wD%.%wE%%wF%.%wG%%wH%%PCode%"
echo, & echo %PUrl%
ping 127.0.0.1 -n "4">nul
start "" "%PUrl%"
if defined P_PSW start "" mshta VBScript:Msgbox("请输入此提取码∶ %P_PSW%",vbSystemModal,"提取码")(close)
exit
由于新的代码超过了回答字数限制,无法贴出,因此请通过以上脚本代码进行跳转下载吧。
本回答被提问者采纳 参考技术B @echo on & @title 获取时间@bath>1.txt
@exit
会停,按回车就可以了 参考技术C 中间两个是60进制,最后是千进制??追问
60进制
以上是关于bat读取时间、计算时间间隔脚本的主要内容,如果未能解决你的问题,请参考以下文章
[BAT] BAT 顺序执行其他BAT 批处理文件可设置时间间隔(实际场景Windows下依次启动多个Tomcat服务)