标题: [数值计算] [已解决]批处理如何计算时间差? [打印本页]
作者: michael8111 时间: 2011-2-22 16:52 标题: [已解决]批处理如何计算时间差?
- set a=%time%
- copy sesvc.txt C:\windows
- set b=%time%
复制代码
请问如何计算 %b% 和 %a% 这两个时间的差值?
[ 本帖最后由 michael8111 于 2011-2-22 21:04 编辑 ]
作者: Batcher 时间: 2011-2-22 16:53
批处理计算时间差获取代码运行时间
http://bbs.bathome.net/thread-4701-1-1.html
作者: wc726842270 时间: 2011-2-22 16:59
用FOR /F把%TIME%当作字符串处理,之后用SET /A计算
作者: Batcher 时间: 2011-2-22 17:03 标题: 回复 3楼 的帖子
没这么简单吧,你不考虑一下天、小时、分钟、秒之间的换算么?
作者: wc726842270 时间: 2011-2-22 17:07 标题: 回复 4楼 的帖子
呵呵。我是针对于LZ的%TIME%做的回答。for /f下不是有DELIMS=:.
作者: Batcher 时间: 2011-2-22 17:09 标题: 回复 5楼 的帖子
如果文件很大,需要复制1个多小时,你能直接计算出差值?
作者: hanyeguxing 时间: 2011-2-22 20:14
%date%和%time%要求为标准格式- @echo off&setlocal enabledelayedexpansion
- call:k
- ping 127.1 -n 2 >nul
- call:k
- set/a D=D2-D1,K=K2-K1
- if %K% leq 0 set/a K+=8640000,D-=1
- if %D% leq 0 (echo %K%0毫秒)else echo %D%天%K%0毫秒
- pause&exit
- :k
- set E=%date%&set T=%time%&set K=%time:~0,2%&set/a N+=1
- set/a D%N%=1%E:~8,2%%%100,M=1%E:~5,2%%%100-1,Y=%E:~0,4%,"K%N%=%K: =%*360000+(1%T:~3,2%-100)*6000+(1%T:~6,2%-100)*100+1%T:~9,2%-100"
- for /l %%a in (1,1,%M%) do set/a "K=^!(%%a-4)|^!(%%a-6)|^!(%%a-9)|^!(%%a-11)","D%N%+=^!(%%a-2)*(28+^!((^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)))+K*30+(^!^!(%%a-2)&^!K)*31"
- set/a D%N%+=(Y-1)*365+Y/4-Y/100+Y/400
复制代码
作者: michael8111 时间: 2011-2-22 20:51 标题: 回复 7楼 的帖子
这个代码运行之后为什么总是出现:复制代码
这个1060毫秒是什么的时间差?
[ 本帖最后由 michael8111 于 2011-2-22 20:52 编辑 ]
作者: hanyeguxing 时间: 2011-2-22 20:56 标题: 回复 8楼 的帖子
把 7楼 中的 ping 127.1 -n 2 >nul 替换为你需要执行的代码,显示的就是执行这个命令所需要的时间
作者: michael8111 时间: 2011-2-22 21:00 标题: 回复 5楼 的帖子
这个文件复制过去40多秒左右。关键是用delims=:怎么把关键的时间部分(如20:02:21.54中的02:21)提取出来并把“:”换成“.”?
作者: michael8111 时间: 2011-2-22 21:02 标题: 回复 9楼 的帖子
虽然有点不准……但还是正确有效的。谢谢!
作者: Batcher 时间: 2011-2-22 21:40 标题: 回复 11楼 的帖子
具体哪里不准?让他再去修改一下代码?
作者: smss 时间: 2019-4-7 11:29
- @echo off
- SetLocal EnableDelayedExpansion
- set CURRENT_DATE=%date:~0,10%
- set CURRENT_TIME=%time:~0,8%
- set MSG=%CURRENT_DATE% %CURRENT_TIME% 执行开始
- set H1=%CURRENT_TIME:~0,2%
- set /a H1=%H1:0=%+0
- set M1=%CURRENT_TIME:~3,2%
- set /a M1=%M1:0=%+0
- set S1=%CURRENT_TIME:~6,2%
- set /a S1=%S1:0=%+0
- echo %MSG%
- echo %MSG% >> 程序执行时间.log
-
- ::程序的执行命令
- ::================================================
- ping 127.0.0.1 >nul
- ::================================================
-
- set CURRENT_DATE=%date:~0,10%
- set CURRENT_TIME=%time:~0,8%
- set MSG=%CURRENT_DATE% %CURRENT_TIME% 执行结束
- set H2=%CURRENT_TIME:~0,2%
- set /a H2=%H2:0=%+0
- set M2=%CURRENT_TIME:~3,2%
- set /a M2=%M2:0=%+0
- set S2=%CURRENT_TIME:~6,2%
- set /a S2=%S2:0=%+0
- echo %MSG%
- echo %MSG% >> 程序执行时间.log
-
- set /a TIME_SECOND1=%H1%*3600+%M1%*60+%S1%
- set /a TIME_SECOND2=%H2%*3600+%M2%*60+%S2%
- set /a TIME_DIFF=%TIME_SECOND2%-%TIME_SECOND1%
- set /a H_DIFF=%TIME_DIFF%/3600
- set /a M_DIFF=(%TIME_DIFF%-%H_DIFF%*3600)/60
- set /a S_DIFF=%TIME_DIFF%%%60
-
- if %H_DIFF% LSS 10 set H_DIFF=0%H_DIFF%
- if %M_DIFF% LSS 10 set M_DIFF=0%M_DIFF%
- if %S_DIFF% LSS 10 set S_DIFF=0%S_DIFF%
-
- echo 执行时间:%H_DIFF%:%M_DIFF%:%S_DIFF%
- echo 执行时间:%H_DIFF%:%M_DIFF%:%S_DIFF% >> 程序执行时间.log
- pause
复制代码
作者: smss 时间: 2019-4-7 11:33
- @echo off
- set n=11
- set t1=%time:~,-3%
- echo 命令写在这里
- ping 127.0.0.1 >nul
- set t2=%time:~,-3%
- for /f "tokens=1-6 delims=:" %%i in ("%t1%:%t2%") do (
- set/a s1=%%i*3600+%%j*60+%%k
- set/a s2=%%l*3600+%%m*60+%%n
- )
- set/a t=%s2%-%s1%
- echo 程序运行%t%秒
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |