Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Батник на выключение с автоотменой в заданный промежуток времени (http://forum.oszone.net/showthread.php?t=234685)

Cashmar 15-05-2012 12:43 1916260

Батник на выключение с автоотменой в заданный промежуток времени
 
Здравствуйте, подскажите пожалуйста. Нужен батник на выключение, но с возможностью отмены в заданный промежуток времени, не пользователем, а автоматически. Для чего это нужно - на моей машине стоит 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 1916944

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 1917116

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


Время: 18:50.

Время: 18:50.
© OSzone.net 2001-