2017-01-29 9 views
2

Я пытаюсь запустить VBScript, проверяя время до достижения 22:00 (10 вечера), а затем запускает shutdown.bat. Я всегда получаю такие ошибки, как «цикл» без «do». Может ли кто-нибудь взглянуть на мой код и посмотреть, есть ли способ его исправить?Looping VBScript

Do 
    If Hour(Time()) => 22 And Minute(Time()) => 30 And Hour(Time()) < 23 Then 
Loop Until True 
    Then 
     'Dim shell 
     Set shell = CreateObject("WScript.Shell") 
     shell.Run "shutdown.bat" 
     Set shell = Nothing 
    End If 
+4

использовать [Планировщик заданий Windows] (https://www.evermap.com/AutoBatchUseTaskScheduler.asp) для этого – Slai

ответ

2

Если вы действительно хотите сохранить ход цикла до тех пор, пока не достигает определенного часа, вот как это делается:

Do While True ' = Do the following forever (or until something breaks the loop) 
    If Hour(Time()) => 22 And Minute(Time()) => 30 And Hour(Time()) < 23 Then 
     ' Do whatever you want and then 
     ' break the loop: 
     Exit Do 
    End If 
Loop 

Однако, я не рекомендовал бы, потому что он будет потреблять много ресурсов. Вместо этого вы должны использовать Task Scheduler.

Надежда, что помогает :)

+0

Не хотите ли использовать 'Do Until True' вместо' Do While True' или два взаимозаменяемых? – H3153N

+0

@ H3153N, 'Хотя True' не означает« пока условие истинно ». 'Хотя True' всегда верно, поэтому вы в основном запускаете цикл бесконечно, пока что-то не сломает его. Я добавил объяснение в свой ответ выше. –

1

Loop, пока текущее время не будет больше нужного времени окончания:

endtime = CDate("22:30") 
Do Until Time > endtime 
    WScript.Sleep 100 
Loop 
CreateObject("WScript.Shell").Run "shutdown.bat" 

WScript.Sleep Использование внутри цикла гарантирует, что цикл не делает выгорания в на CPU.

Однако, как уже упоминалось, @AhmedAbdelhameed, создание запланированной задачи, которая запускает shutdown.bat в нужное время, обычно будет намного более эффективным.