3

私はジレンマに陥っています。ユーザーに、次のタスクが始まろうとしていることを知らせるプリエンプティブ メールを送信したいと考えています。そのために、いくつかの変数を定義し、blat 経由で電子メールを送信し、バッチを 5 分間スリープさせてから、残りのスクリプトを実行しています。

%time%午後 4 時に実行すると、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

期待どおりの05ではなく、5を取得します。時間に算術演算を使用すると先頭のゼロが削除されるため、後で追加しようとしましたが、後の SET は IF ステートメント内にあり、表示されませんか? どうすればそれを見ることができますか?バッチに環境変数のようなものはありますか?

この問題は、最初の 9 分以内にのみ発生することに注意してください。それ以降は、先行ゼロはなくなります。

おまけ: 1 時間の分数が 55 ~ 59 の場合はどうなりますか? 私の例では 60 から 64 になるので、1 時間を切り上げて残りの分を処理する方法が必要です。今のところ、これはバグだと思いますが、このスクリプトが奇妙なタイミングで実行されるとは考えていません。しかし、それが簡単な修正である場合は、私に知らせてください。私はその問題に取り組もうとさえしていません.

よろしくお願いします

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 に答える