我想知道如何计算当前时间和午夜时间之间的秒数,为我的脚本。
我正在运行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%