克服批处理脚本中的午夜障碍
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 点
我一直在使用一个相当简单的时间脚本来跟踪软件的 运行 时间测量与时钟时间测量,以确保它们大致同步。但是,我已经意识到,如果时钟超过午夜,这种方法将完全失败。
现在我正在这样做:
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 点