批处理脚本以秒为单位计算时间差异

时间:2016-09-28 10:07:45

标签: batch-file

我想知道如何为我的剧本计算当前时间和午夜时间之间的秒数。

我正在运行w10,我的脚本需要超时-t X

其中X(s)= midnight-currentTime

无论如何我能做到吗?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

要在批处理文件中使用powershell,我建议:

For /F %%I In ('Powershell ^
    "[int](New-TimeSpan -End (Get-Date).AddDays(1).Date).TotalSeconds"'
) Do Timeout /T %%I

然而,由于获得powershell输出和执行timeout命令之间的跨度,这并不准确。

答案 1 :(得分:0)

%TIME%将扩展为HH:MM:SS.DD或HH:MM:SS,DD,其中HH =小时,MM =分钟,SS =秒,DD =小数秒。

我假设我们可以忽略小数秒DD。

HH将采用24小时格式,并且可能具有前导空格或前导0。

MM和SS可能有前导0。

SET / A将前导0的数字视为八进制,这不是我们想要的。所以我们只需要将任何空格转换为0,并在每个值前加1。

因此for /f "tokens=1-3 delims=:.," %%a in ("%time: =0%") do ...将产生以下值:

1%%a = hours + 100
1%%b = minutes + 100
1%%c = seconds + 100

其余的是简单的数学

(24*60*60)-((((1%%a*60)+1%%b)*60)+1%%c)-((((100*60)+100)*60)+100)
simplifies to
86400 - ( ((1%%a*60+1%%b)*60+1%%c) - 366100 )
simplifies to
452500-(1%%a*60+1%%b)*60-1%%c

所以完整的代码变成了

for /f "tokens=1-3 delims=:.," %%a in (
  "%time: =0%"
) do set /a "SecondsUntilMidnight=452500-(1%%a*60+1%%b)*60-1%%c"
timeout /t %SecondsUntilMidnight%