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

Overcoming the Midnight Barrier in Batch Script

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

现在我正在这样做:

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 点