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

Batch file 批处理脚本以秒为单位计算时间差,batch-file,Batch File,我想知道如何为我的脚本计算当前时间和午夜时间之间的de秒数 我正在运行w10,我的脚本需要一个超时-tx 其中X(s)=午夜当前时间 还有什么我可以做的吗 提前谢谢你 要在批处理文件中使用powershell,我建议: For /F %%I In ('Powershell ^ "[int](New-TimeSpan -End (Get-Date).AddDays(1).Date).TotalSeconds"' ) Do Timeout /T %%I 但是,由于获取powershell输

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

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

其中X(s)=午夜当前时间

还有什么我可以做的吗


提前谢谢你

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

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

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

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

你提到了“你的脚本”,所以发布它,并根据现场程序给我们一个回答的机会。此外,由于时间等是局部可变的,您必须向我们提供您的特定日期和时间变量输出<代码>回音=[%DATE%][%TIME%]。我们还需要确定您是否想知道离午夜还有多长时间,或者离午夜还有多长时间。dbenham编写了一个很好的混合批处理文件,该文件非常适合日期和时间计算<代码>对于/f%%I in('powershell“[int](新时间跨度-结束(获取日期).addDays(1).date.totalseconds“),请设置“secondsToMidnight=%%I”