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



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

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

Where X(s) = midnight-currentTime

有什么方法可以让我做这件事吗?

提前感谢!

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

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

由于获取powershell输出和执行timeout命令之间的时间跨度,它将不准确。

%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%

最新更新