我想知道如何为我的剧本计算当前时间和午夜时间之间的秒数。
我正在运行w10,我的脚本需要超时-t X
其中X(s)= midnight-currentTime
无论如何我能做到吗?
提前谢谢!
答案 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%