Performance 克服批处理脚本中的午夜障碍

Performance 克服批处理脚本中的午夜障碍,performance,batch-file,time,timer,batch-processing,Performance,Batch File,Time,Timer,Batch Processing,我一直在使用一个相当简单的时间脚本来跟踪软件的运行时间测量和时钟时间测量,以确保它们大致同步。然而,我意识到,如果时钟超过午夜,这种方法将完全失败 现在我正在这样做: set start=!time! [Code to measure goes here] set end=!time! for /F "tokens=1-4 delims=:.," %%a in ("!start!") do ( set /a "start=(((%%a*60)+1%%b %% 100)*60+1

我一直在使用一个相当简单的时间脚本来跟踪软件的运行时间测量和时钟时间测量,以确保它们大致同步。然而,我意识到,如果时钟超过午夜,这种方法将完全失败

现在我正在这样做:

set start=!time!
[Code to measure goes here]
set end=!time!

for /F "tokens=1-4 delims=:.," %%a in ("!start!") do (
        set /a "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
    )
for /F "tokens=1-4 delims=:.," %%a in ("!end!") do (
        set /a "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
    )

set /A elapsed=end-start
echo Elapsed Time: !elapsed!
有人知道我可以用什么巧妙的小技巧来回避这个问题吗

 if %elapsed% lss 0 set /a elapsed +=8640000
其中8640000是24小时内百分之一秒的数量


当然,如果你使用的是12小时时钟(你不会说),你需要使用一个不同的常数——临界时间变成凌晨1点/下午1点

标准答案是——转换为历元时间。不幸的是,在纯Windows上很难做到这一点。我的第一个建议是“安装perl”。我的第二个任务是运行
date/t
并比较它们。不平等可能仍然是一个安全的假设,即就在第二天。Ref:-还有一个vbscript答案。如果安装perl是一个选项(例如从ActiveState或草莓)-您可以用
perl-e“print time”
(或更多脚本)替换您的time命令。请看这里:是的-我一直都在这样做,只要时间间隔不到24小时,它就可以工作。我觉得自己非常愚蠢,因为我没有想到这个简单而精彩的解决方案!您是否应该只使用
+
而不是
+=
设置/a经过时间+=8640000
将8640000添加到
经过时间
set/a appead=8640000+appead
set/a appead=8640000+%appead%
也可以做同样的事情,但第一种形式的输入更少。