3

我陷入了两难境地。我想向用户发送一封先发制人的电子邮件,告诉他们即将发生的任务。为了做到这一点,我定义了一些变量,通过 blat 发送电子邮件,将批处理休眠 5 分钟,然后执行脚本的其余部分。

%time%在下午 4:00执行时,我得到 16:00:00.00。如果我添加 5 分钟,仅用于在电子邮件中显示,代码如下:

@echo on
SET /a timeminute = 00 + 5 << --- test code
::SET /a timeminute = %time:~3,2% + 5 << --- actual code in GoLive
IF %timeminute% LEQ 9 (
    GOTO :resetTime
) ELSE (
    GOTO :end
)
:resetTime
SET timeminute = "0%timeminute%"

:end
echo %timeminute%
pause

我得到 5,而不是预期的 05。在时间上使用算术会丢弃前导零,所以我稍后尝试将其添加回来,但后面的 SET 在 IF 语句中并且看不到?我怎么能看到呢?批处理中是否有环境变量之类的东西?

请记住,此问题仅发生在一小时的前 9 分钟内,在那之后,不再有前导零。

奖励:当一小时的分钟数为 55-59 时会发生什么?在我的示例中,它将是 60-64,因此我需要一种方法来四舍五入一个小时并处理剩余的分钟数。现在,我认为这是一个错误,但我没有预见到这个脚本会在那些奇怪的时间运行。但如果这是一个简单的解决方法,请告诉我,因为我什至没有尝试解决这个问题。

非常感谢你

4

2 回答 2

4

做同样事情的更紧凑的形式是:

@echo on
for /F "tokens=1-3 delims=:." %%a in ("%time%") do (
   set timeHour=%%a
   set timeMinute=%%b
   set timeSeconds=%%c
)
rem Convert HH:MM to minutes + 5
set /A newTime=timeHour*60 + timeMinute + 5
rem Convert new time back to HH:MM
set /A timeHour=newTime/60, timeMinute=newTime%%60
rem Adjust new hour and minute
if %timeHour% gtr 23 set timeHour=0
if %timeHour% lss 10 set timeHour=0%timeHour%
if %timeMinute% lss 10 set timeMinute=0%timeMinute%
echo %timeHour%:%timeMinute%:%timeSeconds%
pause
于 2012-12-06T03:16:29.317 回答
1

用以下内容回答了我自己的问题:

@echo on
setlocal enabledelayedexpansion

set timehour=%time:~0,2%
set timeminute=%time:~3,2%
set timeseconds=%time:~6,2%
set addTime=5
IF %timeminute:~0,1% lss 1 set timeminute=!timeminute:~1,1!
IF %timeminute:~0,1% lss 1 set timeminute=!timeminute:~1,1!
set /a timeminute=%timeminute% + %addTime%
IF %timeminute% lss 10 set timeminute=0!timeminute!

IF %timeminute% equ 60 (
set timeminute=00
set /a timehour=%timehour% + 1
)

IF %timeminute% equ 61 (
set timeminute=01 
set /a timehour=%timehour% + 1
)

IF %timeminute% equ 62 (
set timeminute=02 
set /a timehour=%timehour% + 1
)

IF %timeminute% equ 63 (
set timeminute=03
set /a timehour=%timehour% + 1
)

IF %timeminute% equ 64 (
set timeminute=04
set /a timehour=%timehour% + 1
)

IF %timehour% equ 25 (
set timehour=00
)

IF %timehour% lss 10 set timehour=0!timehour!

echo %timehour%:%timeminute%:%timeseconds%
pause
于 2012-12-05T20:13:13.060 回答