Windows 如何比较两个时间戳以查看一个时间戳是否晚于特定的分钟数?
我试图比较两个时间戳(Windows 如何比较两个时间戳以查看一个时间戳是否晚于特定的分钟数?,windows,batch-file,timestamp,Windows,Batch File,Timestamp,我试图比较两个时间戳(timeA与timeB)的格式为HH:MM,没有秒,这样我就可以看到如果timeB的时间大于30分钟或大于timeA的时间。我可以假设timeB总是等于或(最常见的)晚于timeA REM 12:42 set "hourA=12" set "minA=42" REM 12:49 set "hourB=12" set "minB=49" if %hourA% equ %hourB% ( if %minA% equ %minB% ( echo A is equa
timeA
与timeB
)的格式为HH:MM,没有秒,这样我就可以看到如果timeB
的时间大于30分钟或大于timeA
的时间。我可以假设timeB
总是等于或(最常见的)晚于timeA
REM 12:42
set "hourA=12"
set "minA=42"
REM 12:49
set "hourB=12"
set "minB=49"
if %hourA% equ %hourB% (
if %minA% equ %minB% (
echo A is equal to B!
) else (
echo A is NOT equal to B!
)
)
我发现很难实现检查timeB
是否比timeB
大于或等于30分钟的逻辑,例如timeA
为12:42
和timeB
为13:15
需要先检查小时,然后是分钟数,然后再检查小时数
任何建议或示例代码都很好(我对批处理脚本比较陌生)。批处理脚本在Windows上运行。@ECHO OFF
SETLOCAL
设置“timestra=12:42”
设置“timestrb=03:01”
设置/a timediff=(1%timestrb:~0,2%-1%timestra:~0,2%)*60+(1%timestrb:~-2%-1%timestra:~-2%)
如果%timediff%lss 0集/a timediff+=60*24
回波时差=%timediff%
后藤:EOF
给定两个24小时格式的有效时间字符串,将时差设置为60*((100+最后一个HH)-(100+第一个HH))+((100+最后一个MM)-(100+第一个MM))
100+
通过在时间字符串的前/后两个字符前面串入1
来实现。这克服了批处理的“前导0为八进制”格言,因为两种情况下的前导数字都是1
如果整体计算结果为负,那么我们已经过了午夜,所以加上一整天的分钟数。当然,这只有在两次之间的距离小于24小时时才起作用,考虑到目前的情况,这可能是足够的
那么这就是一个简单的问题
if %timediff% gtr 30 (echo more than 30) else (echo less than 30)
看见答案中的代码示例可以修改30分钟,而不是4小时。对于一天内的时差检查,使用
set/a
将小时乘以60,再加上分钟,然后使用if
比较两个整数值。感谢您提供详细答案。当我自己运行它时,它工作得非常好。但是,当我将命令(第3-8行)复制粘贴到现有脚本中时,我得到了一个0,这在当时是出乎意料的。你知道为什么会这样吗?你需要准确地看到你在批次中有什么以及两个时间串的内容。当然,您正在适当地设置时间字符串,不是吗?此外,它可能取决于批次中的精确位置-如果它位于代码块
(括号内的一系列行)内,则需要延迟扩展
,并使用
代替粘贴代码中的%
(请参见顶部栏上的搜索
功能,获取有关延迟扩展
的详细文档,如果需要)抱歉,我确实解决了括号问题。谢谢