Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скрипт запуска программ по времяни

Ответить
Настройки темы
CMD/BAT - [решено] Скрипт запуска программ по времяни

Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Прошу прощения если пишу не в ту ветку форума. Нужна ваша помощь в написании скрипта который мог бы запускать определенный exe файл в зависимости от времени на компьютере. К сожалению я сам работал очень мало со скриптами и сам написать такой не смогу

Подробнее о задаче: допустим включается компьютер с 8 утра и до 5 вечера в любое время в этот момент должен запуститься файл 1.exe, и он же должен сам закончить свое выполнение часов в 16:30 а Если компьютер включается с 0 часов до 7 утра то должен запуститься файл 2.exe. и так же закончить свое выполнение часов в 6 утра. Предполагается что данный скрипт будет запускаться планировщиком задач при включении компьютера. оба файла лежат по пути (C:\Program Files\cpustats)

Помогите пожалуйста. Очень нужно для работы

Если нужны доп. данные пишите. Заранее большое спасибо

Отправлено: 12:42, 29-06-2017

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


p.igor.kin,
в том же планировщике делаете задачу на запуск 1.exe вместе с вкл компа и завершить задачу в 16:30
по аналогии для 2.exe

Отправлено: 12:57, 29-06-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата alpap:
в том же планировщике делаете задачу на запуск 1.exe вместе с вкл компа и завершить задачу в 16:30
по аналогии для 2.exe »

Извините пожалуйста а как сделать в планировщике 1 задачу для старта при включении компа и завершить её в 16:30 так что бы эта задача работала каждый день? Там есть такой пункт завершить задачу но там ставиться число и время, тоесть эта задача отработает 1 раз

И самое главное как в планировщике задать запуск 1.exe с 8 до 17 в любове время и запуск 2.exe с 0 до 7 ?

Последний раз редактировалось p.igor.kin, 29-06-2017 в 13:23.


Отправлено: 13:07, 29-06-2017 | #3


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Не понимаю. Запускать при включении? Или после включения в неопределённое случайное время? »
Компьютер может быть включен как в 8 часов так в 9,10, 11 и т.д. Дак вот нужно что бы скрипт запускался при включении компьютера(это я планирую сделать через планировщик или поставить тупо в автозагрузку) Дальше скрипт должен смотреть сколько времени на компьютере и уже в зависимости от времени запускать файл либо 1.exe либо 2.exe

Отправлено: 13:51, 29-06-2017 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


p.igor.kin, если компьютер включили до восьми часов, 1.exe вообще не должен запускаться?

Отправлено: 15:04, 29-06-2017 | #5


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата p.igor.kin:
как в 8 часов так в ..»
а сколько времени нужно для работы, например, 1.exe, если компьютер включили в 16:25, хватит 5ти минут ему, ведь в 16:30 он должен быть остановлен и вопрос Busla тоже актуален.

Отправлено: 19:10, 29-06-2017 | #6


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


p.igor.kin, В Вашей проблеме 2 задачи.
1. В зависимости от времени включения компьютера необходимо при включении запустить ту или иную программу. Это делает один скрипт и это одна задача в планировщике при включении.
2. В заданное время необходимо завершить указанную программу. Это сделает другой скрипт и это вторая задача планировщика. Если таких программ несколько, то на завершение каждой необходимо задание в планировщике на каждую задачу.
ИМХО, проще это реализовать vbs-скриптами.
Задача 1. Запускаем предметную программу в зависимости от того, когда запущен скрипт. Скрипт поместить в планировщик на включение.
Код: Выделить весь код
ProgStart = Array("C:\Windows\System32\mspaint.exe", "08:00:00", "16:30:00", _
                "C:\Windows\System32\notepad.exe", "00:00:00", "06:00:00")
                
Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3

For i = 1 To NProg
    PrgName = ProgStart(N1 + 3 * (i - 1))
    TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
    TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
    If TBeg <= Time() And Time() <= TEnd Then
        WShell.Run PrgName, 7, False
    End If
Next
Пропишите вместо моих примеров реальные экзешники и диапазоны времени запуска. Сохраните скрипт в файл с расширением .vbs, например, Starter.vbs. Создайте на него задание в планировщике.
Возможно, в планировщике его надо запускать как, например:
C:\Windows\System32\wscript.exe Диск:\Путь\Starter.vbs
Задача 2 (3). Принудительно завершаем указанный процесс. Для каждого - отдельное задание в планировщике.
Код: Выделить весь код
Set Arg = WScript.Arguments
If Arg.Count = 0 Then WScript.Quit

Set WMI = GetObject("winMgmts:")
SQuery = "Select *From Win32_Process Where Name=" + """" + Arg(0) + """"

Set Processes = WMI.ExecQuery(SQuery)
If Processes.Count = 0 Then WScript.Quit

On Error Resume Next
For Each Process In Processes
    Process.Terminate
Next
On Error GoTo 0
Сохраните скрипт в файл с расширением .vbs, например, ProgKill.vbs. Запускать его надо с параметром, например:
Диск:\Путь\ProgKill.vbs "notepad.exe".
Создайте на него задание в планировщике на нужное время.
Возможно, в планировщике его надо запускать как, например:
C:\Windows\System32\wscript.exe Диск:\Путь\ProgKill.vbs "notepad.exe"
На каждую программу задание в планировщике
Цитата p.igor.kin:
а Если компьютер включается с 0 часов до 7 утра то должен запуститься файл 2.exe. и так же закончить свое выполнение часов в 6 утра »
В Вашей постановке нет логики: если, согласно утверждению, задача запустится в 6час 1 мин, то её никаким образом не убить в 6 часов
Поэтому надо чётко продумать хронологию событий: нельзя запускать программу после того, как Вы декларировали её завершение.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 29-06-2017 в 21:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:24, 29-06-2017 | #7


Ветеран


Contributor


Сообщения: 2710
Благодарности: 1686

Профиль | Отправить PM | Цитировать


p.igor.kin, Пытаюсь переосмыслить постановку, чтобы ограничиться одним скриптом и одним заданием в планировщике:
С 8 утра и до 16.30 вечера должна обязательно выполняться программа 1.exe, до 8.00 и после 17.00 её не должно быть.
Таких программ может быть несколько со своими интервалами работы и временем завершения.
Вот скрипт, который надо поместить в планировщик и в планировщике повторять его с интервалом, допустим, 5 мин.
Код: Выделить весь код
'                                       Путь к .exe  начало      конец       завершить
ProgStart = Array("C:\Windows\System32\mspaint.exe", "08:00:00", "16:30:00", "17:00:00", _
                "C:\Windows\System32\notepad.exe", "00:00:00", "06:00:00", "06:30:00")

ErrTime = 30        ' Время отображения сообщения об ошибке сек.

Set WShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WMI = GetObject("winMgmts:")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 4

For i = 1 To NProg
    PrgName = ProgStart(N1 + 4 * (i - 1))
    If FSO.FileExists(PrgName) Then
        ExeName = FSO.GetFileName(PrgName)
        TBeg = TimeValue(ProgStart(N1 + 1 + 4 * (i - 1)))
        TEnd = TimeValue(ProgStart(N1 + 2 + 4 * (i - 1)))
        Term = TimeValue(ProgStart(N1 + 3 + 4 * (i - 1)))
        
        SQuery = "Select *From Win32_Process Where Name=" + """" + ExeName + """"
        Set Processes = WMI.ExecQuery(SQuery)
        
        If Processes.Count = 0 Then
            If TBeg <= Time() And Time() <= TEnd Then
                WShell.Run """" + PrgName + """", 7, False
            End If
        Else
            If Time() >= Term Or Time() < TBeg Then
                On Error Resume Next
                For Each Process In Processes
                    Process.Terminate
                Next
                On Error GoTo 0
            End If
        End If
    Else
        LL = WShell.Popup("Отсутствует файл" + vbCrLf + PrgName, ErrTime, "Ошибка при запуске программы", 48)
    End If
Next


бремени, времени, семени, темени, пламени, стремени, знамени, племени, имени, вымени

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 17-07-2017 в 16:57.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:09, 30-06-2017 | #8


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья простите пожалуйста за долгое отсутствие уезжал в отпуск. Посмотрел то что вы тут накидали (варианты,идеи) не очень конечно понял. Может я так плохо объяснил а может скрипт такой сложный. Давайте поступим немного по другому.

Задача: Пользователь включает компьютер (это может быть в любое время) Нужен скрипт который при включении компьютера будет смотреть сколько времени на компьютере и будет запускать нужную программу. Предполагается что данный скрипт будет лежать по пути (C:\Program Files\cpustats и иметь название cpustats.vbs) и в планировщике будет создана задача:

Тригер: при запуске системы
Действие: запуск программы (C:\Program Files\cpustats\cpustats.vbs)

Условия запуска программ:

Если время с 8:00 до 18:00 то запустить программу (C:\Program Files\cpustats\dau\cpustats.exe)
Если время с 20:00 до 6:00 то запустить программу (C:\Program Files\cpustats\night\cpustats.exe)

На данный момент воспользовался скриптом пользователя megaloman за что ему огромное спасибо. ниже выкладываю поправленый скрипт под мои условия. Сохранил его как cpustats.vbs

код скрипта
PHP код: Выделить весь код

ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe""08:00:00""18:00:00"_
                
"C:\Program Files\cpustats\night\cpustats.exe""20:00:00""06:00:00")
                
Set WShell CreateObject("WScript.Shell")

N1 LBound(ProgStart)
N2 UBound(ProgStart)
NProg = (N2 N1 1) / 3
For 1 To NProg
    PrgName 
ProgStart(N1 * (1))
    
TBeg TimeValue(ProgStart(N1 * (1)))
    
TEnd TimeValue(ProgStart(N1 * (1)))
    If 
TBeg <= Time() And Time() <= TEnd Then
        WShell
.Run PrgName7False
    End 
If
Next 



Но при его запуске получаю ошибку: (Если я правильно понял ругается на строку WShell.Run PrgName, 7, False)

Последний раз редактировалось p.igor.kin, 17-07-2017 в 11:17.


Отправлено: 10:48, 17-07-2017 | #9


Новый участник


Сообщения: 27
Благодарности: 0

Профиль | Отправить PM | Цитировать


Файлы точно лежат в папке C:\Program Files\cpustats\dau и C:\Program Files\cpustats\night\cpustats.exe)


Команда dir "C:\Program Files\cpustats\dau\cpustats.exe" :

C:\Users\----------->dir "C:\Program Files\cpustats\dau\cpustats.exe"
Том в устройстве C не имеет метки.
Серийный номер тома: 2A14-D888

Содержимое папки C:\Program Files\cpustats\dau

29.04.2017 16:25 270*336 cpustats.exe
1 файлов 270*336 байт
0 папок 64*124*461*056 байт свободно

Скрипт поправил как вы сказали, но все равно не работает(

Скрипт
Код: Выделить весь код
ProgStart = Array("C:\Program Files\cpustats\dau\cpustats.exe", "08:00:00", "18:00:00", _
                "C:\Program Files\cpustats\night\cpustats.exe", "20:00:00", "23:59:59", _
                "C:\Program Files\cpustats\night\cpustats.exe", "00:00:00", "06:00:00")
                
Set WShell = CreateObject("WScript.Shell")

N1 = LBound(ProgStart)
N2 = UBound(ProgStart)
NProg = (N2 - N1 + 1) / 3
For i = 1 To NProg
    PrgName = ProgStart(N1 + 3 * (i - 1))
    TBeg = TimeValue(ProgStart(N1 + 1 + 3 * (i - 1)))
    TEnd = TimeValue(ProgStart(N1 + 2 + 3 * (i - 1)))
    If TBeg <= Time() And Time() <= TEnd Then
        WShell.Run PrgName, 7, False
    End If
Next

Последний раз редактировалось p.igor.kin, 17-07-2017 в 15:38.


Отправлено: 15:20, 17-07-2017 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Скрипт запуска программ по времяни

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Политика запуска программ paull2006 Microsoft Windows 8 и 8.1 8 02-10-2015 12:41
CMD/BAT - [решено] скрипт для запуска 2-х программ (.exe) meGangstaWorld Скриптовые языки администрирования Windows 8 10-06-2013 21:55
Загрузка - Ускорение запуска программ d_stor Microsoft Windows 7 0 06-01-2013 01:21
CMD/BAT - Как написать CMD скрипт для запуска определенного файла по дате и времени traxomot Скриптовые языки администрирования Windows 1 15-12-2010 11:50
VBS/WHS/JS - Скрипт для последовательного запуска нескольких программ skatet Программирование и базы данных 10 21-11-2007 17:02




 
Переход