Я пытаюсь сделать цикл while в файле .bat
, но он не работает должным образом.
Я хочу сохранить текущее время в переменных local_hours
и local_minutes
, а затем проверить, был ли выполнен первый перезапуск. Если первый перезапуск не был сделан, то проверьте, соответствует ли текущее время времени перезапуска. Если restart_1_done
возвращает значение false или текущее время не соответствует времени перезапуска, тогда я хочу снова установить время (чтобы обновить его до текущего времени) и делать все снова, пока значение restart_1_done
не будет установлено в значение true. .
Код, который я использую для достижения этой цели, следующий
@echo off
set restart_1_hour=06
set restart_1_minutes=00
set restart_2_hour=12
set restart_2_minutes=00
set restart_3_hour=18
set restart_3_minutes=00
set restart_4_hour=00
set restart_4_minutes=00
set restart_1_done=false
set restart_2_done=false
set restart_3_done=false
set restart_4_done=false
:getTime
for /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set local_day=%%a)
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set local_month=%%a)
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set local_year=%%b)
for /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set local_hours=%%a)
for /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set local_minutes=%%b)
set local_time=%local_hours%h%local_minutes%m
set local_date=%local_day%/%local_month%
:fstRestart
if "%restart_1_done%"=="false" (
if "%local_hours%"=="%restart_1_hour%" (
if "%local_minutes%"=="%restart_1_minutes%" (
echo [%local_date% - %local_time%] Rebooting the main server...
set restart_1_done=true
)
)
) else (
goto :getTime
)
goto :fstRestart
Если я запускаю этот код в то время, когда restart_1_hours
и restart_1_minutes
совпадают, он работает. Но если я установлю, например, 15:32 и открою файл в 15:31, он не будет работать, когда время изменится на 15:32.
Я даже пытался скопировать весь код :getTime
в оператор else
, но это не сработало.