PDA

Показать полную графическую версию : [решено] Батник на выключение с автоотменой в заданный промежуток времени


Cashmar
15-05-2012, 12:43
Здравствуйте, подскажите пожалуйста. Нужен батник на выключение, но с возможностью отмены в заданный промежуток времени, не пользователем, а автоматически. Для чего это нужно - на моей машине стоит Acronis Backup & Recovery, который делает backup 4-х компов ночью по сети. После выполнения задания резервного копирования прописана команда на выключение компов C:\WINDOWS\system32\shutdown.exe /s /f /t 300(Но она просто вырубает машинки через пять минут). Так вот необходим батник, который перед выполнением команды shutdown, проверяет системное время, и если это время,например,находится в диапазоне (09.00 - 19.00 - рабочее время), то команда shutdown не выполняется, а если системное время в не этого диапазона , то выполняется.Заранее спасибо.

Anonymоus
16-05-2012, 12:50
Cashmar, вот вам батник:

@Echo Off
:: Начало рабочего времени
Set WTimeBegin=09:00:00
:: Конец рабочего времени
Set WTimeEnd=19:00:00


:: Сериализуем время для более удобного сравнения
Call :ParseTimestamp %WTimeBegin%&Call :SerializeTime
Set MinTime=%ErrorLevel%
Call :ParseTimestamp %WTimeEnd%&Call :SerializeTime
Set MaxTime=%ErrorLevel%
:: Проверяем, всё ли в порядке с рабочим временем, не перепутаны ли значения
If %MinTime% GEQ %MaxTime% Echo Промежуток времени задан неверно&Pause&Exit
:: Получаем текущее время
Call :ParseTimestamp %time:~-0,8%&Call :SerializeTime
Set CurrTime=%ErrorLevel%
:: Проверяем на вхождение в диапазон рабочего, если входит - выходим с сообщением
If %MinTime% LEQ %CurrTime% (
If %CurrTime% LEQ %MaxTime% Echo Работай, негр, солнце ещё высоко!&Pause&Exit
)
:: Если время за пределами рабочего - выключаем.
Shutdown -s -f -t 1
Exit


:: Вызываемые функции
:ParseTimestamp
For /F "tokens=1,2,3 delims=:" %%A In ("%1") Do (Set HH=%%A&Set MM=%%B&Set SS=%%C)
Exit /B

:SerializeTime
Call :Cut %HH% HH&Call :Cut %MM% MM&Call :Cut %SS% SS
Set /A STime=(HH*60*60)+(MM*60)+SS
Exit /B %STime%

:Cut
Set i=%1
If "%i:~,1%"=="0" Set %2=%i:~1%
If "%i:~,1%"==" " Set %2=%i:~1%
Exit /B

Cashmar
16-05-2012, 17:35
Anonymоus, спасибо огромное, работает)) Понравилось "Работай, негр, солнце ещё высоко!"))) Ещё друг на Delphi написал, если кому понадобится обращайтесь!




© OSzone.net 2001-2012