IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Создание bat файла, который бы запускал другой файл после определённого срока (http://www.imho.ws/showthread.php?t=96350)

Nicodim 23.11.2005 13:41

Создание bat файла, который бы запускал другой файл после определённого срока
 
подскажите, что нужно прописать в bat файл, который бы запускал другой файл после определённого срока, например 60 секунд, прочитал другие темы на форуме и яндекса спросил, но там не нашёл ответа :(

Merlin Cori 23.11.2005 13:56

глянь здесь:
http://aboutwin.pp.ru/fido7.ru.windows.f2000/14888.html

SergoZD 23.11.2005 13:58

Nicodim
Стандартными средствами никак вроде.
Вот тут лежит програмка, которую можно кинуть в папку к батнику, и вызывать её, в параметре указывая время в секундах, на которое надо приостанавливать выполнение. Одим минус, при запуске выдает сообщение "Pause Х sec....", которое не отключить.

ЕЖ 23.11.2005 13:59

Nicodim
Код:

WScript.Sleep(1000)
Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run("notepad.exe")

В Sleep - задержка в милисекундах.

SergoZD 23.11.2005 14:00

Merlin Cori
Это Visual Basic ;)

Merlin Cori 23.11.2005 14:10

SergoZD
это vb-скрипт :biggrin:

Nicodim 23.11.2005 14:33

Цитата:

Merlin Cori:
глянь здесь:
http://aboutwin.pp.ru/fido7.ru.windows.f2000/14888.html
мне какраз нужно чтобы проги стартовали не все сразу, а после определённого времени при загрузке системы, и я подумал создать bat файл в котором бы я прописал чтобы вот тот процесс запускался через 10 сек, другой - через 20, 3 через 30 сек, соответсвенно система не будет так тормозить

а может есть какие-то стандартные параметры запуска процесса через определённый срок средствами винды?

ЕЖ 23.11.2005 14:52

Nicodim
Скрипт по ссылке Merlin Cori как раз и расчитан на включение в автозапуск, там внизу есть пример запуска приложения с заданной задержкой.

А вообще ещё есть замечательная программа Startup Organizer, которая умеет управлять ходом автозагрузки, выставлять задержки и многое другое.

Denis 23.11.2005 14:52

Цитата:

Сообщение от Nicodim
мне какраз нужно чтобы проги стартовали не все сразу, а после определённого времени при загрузке системы

Есть достаточно много подобных программ, например, Absolute StartUp.

LightImage 23.11.2005 14:54

Nicodim
VBS вполне стандартный способ, и является средством винды начиная кажется с win98 =) Чуть уточню только вызов скрипта, приведенного в _http://aboutwin.pp.ru/fido7.ru.windows.f2000/14888.html
Код:

cscript Delay.vbs /E:C:\Windows\Notepad.exe /D:10
или
Код:

wscript Delay.vbs /E:C:\Windows\Notepad.exe /D:10
В свое время для себя я написал скрипт, который просто выжидает нужное время, назвав его так же delay.vbs:
Код:

Option Explicit
Const cdefpause = 10
Dim pause, argvobj
 Set argvobj = WScript.Arguments
 if argvobj.Count < 1 then
  pause=cdefpause
 else
  pause=CLng(argvobj(0))
 end if

 Wscript.Echo WScript.ScriptName & ": Задержка выполнения на " & pause & " секунд"
 MyPause(pause)

sub MyPause(delay)
dim st
 st = now
 do while datediff("s", st, now) < delay
 loop
end sub

(про WScript.Sleep я тогда не знал=))
Из батника вызываю так:
Код:

cscript /nologo delay.vbs 300

Ghost 23.11.2005 15:57

Гыхм... А как насчет того, чтобы воспользоваться стандартным планировщиком? И командой AT для управления им из консоли?
Код:

Команда AT предназначена для запуска команд и программ в указанное время   
по определенным дням. Для использования команды AT необходимо, чтобы была 
запущена служба расписаний.
                                             
AT [\\имя_компьютера] [ [код] [/DELETE] | /DELETE [/YES]]               
AT [\\имя_компьютера] время [/INTERACTIVE]
    [ /EVERY:день[,...] | /NEXT:день[,...]] "команда"

\\имя_компьютера  Имя удаленного компьютера. Если этот параметр опущен, 
                  используется локальный компьютер.                       
код                Порядковый номер запланированной задачи.               
/delete            Отмена запланированной задачи. Если код задачи опущен,
                  отменяются все задачи, запланированные для указанного
                  компьютера.
/yes              Отмена запроса на подтверждение при отмене всех
                  запланированных задач.
время              Время запуска команды.
/interactive      Разрешение взаимодействия задачи с пользователем,
                  работающим на компьютере во время запуска задачи.
/every:день[,...]  Запуск задачи осуществляется по указанным дням недели или
                  месяца. Если дата опущена, используется текущий день
                  месяца.                                                 
/next:день[,...]  Задача будет запущена в следующий указанный день недели 
                  (например в следующий четверг). Если дата опущена,       
                  используется текущий день месяца.
"команда"          Команда Windows NT или имя пакетного файла.

Остается только определить время, т.е. прибавить к текущему времени какое-то количество секунд:
Код:

@echo off
set dSEC=40
set  HOU=0
set  MIN=0
set  SEC=0

for /f "delims=:, tokens=1,2,3,*" %%i in ("%TIME%") do (
  set HOU=%%i
  set MIN=%%j
  set SEC=%%k
)

for /l %%i in (0,1,9) do if %SEC%==%%i set SEC=0%SEC%
for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set /a SEC=SEC+dSEC
if /i "%SEC%" geq "60" (
  set /a SEC=SEC-60
  set /a MIN=MIN+1
)

if /i "%MIN%" geq "60" (
  set /a MIN=MIN-60
  set /a HOU=HOU+1
)

if /i "%HOU%" geq "24" (
  set /a HOU=HOU-24
)

for /l %%i in (0,1,9) do if %SEC%==%%i set SEC=0%SEC%
for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set nTIME=%HOU%:%MIN%:%SEC%

echo %TIME% - %nTIME%

;)

Nicodim 23.11.2005 16:14

Цитата:

Ghost:
Остается только определить время, т.е. прибавить к текущему времени какое-то количество секунд:
можешь написать как будет выглядеть батник который бы запускал notepad через 30 секунд?

Ghost 23.11.2005 16:51

Вообще-то вот так:
Код:

@echo off
set dSEC=30
set  HOU=0
set  MIN=0
set  SEC=0

for /f "delims=:, tokens=1,2,3,*" %%i in ("%TIME%") do (
  set HOU=%%i
  set MIN=%%j
  set SEC=%%k
)

for /l %%i in (0,1,9) do if %SEC%==%%i set SEC=0%SEC%
for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set /a SEC=SEC+dSEC
if /i "%SEC%" geq "60" (
  set /a SEC=SEC-60
  set /a MIN=MIN+1
)

if /i "%MIN%" geq "60" (
  set /a MIN=MIN-60
  set /a HOU=HOU+1
)

if /i "%HOU%" geq "24" (
  set /a HOU=HOU-24
)

for /l %%i in (0,1,9) do if %SEC%==%%i set SEC=0%SEC%
for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set nTIME=%HOU%:%MIN%:%SEC%

at %nTIME% /interactive %windir%\notepad.exe

Только вот этот урод (шедулер имеется в виду) почему-то секунды не подхватил, т.е. минимальный интервал - минута. :( Ищу решение...

Nicodim 23.11.2005 17:48

Ghost
сработало, вот только тут можно запускать только по 1 файлу так как каждому процессу присваивается свой ИД, но тут уже встречный вопрос, как в одном батнике прописать чтобы група файлов запускалась, через разные промежутки времени и желательно в секундах

Ghost 23.11.2005 18:30

В секундах пока не получается - не хочет планировщик с ними работать... :( Только с интервалом в минуту. Вот так:
Код:

@echo off
if "%1"=="" exit
start %1
if "%2"=="" exit

set HOU=0
set MIN=0

for /f "delims=:, tokens=1,2,*" %%i in ("%TIME%") do (
  set HOU=%%i
  set MIN=%%j
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set /a MIN=MIN+1

if /i "%MIN%" geq "60" (
  set /a MIN=MIN-60
  set /a HOU=HOU+1
)

if /i "%HOU%" geq "24" (
  set /a HOU=HOU-24
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set nTIME=%HOU%:%MIN%:00
at %nTIME% /interactive D:\myStart.cmd %2 %3 %4 %5 %6 %7 %8 %9

Запускать, например, так:
Код:

myStart.cmd %windir%\system32\freecell.exe %windir%\system32\sol.exe

Nicodim 23.11.2005 19:10

Ghost
что-то не получается с многозадачностями:
например мне нужно запустить ACDSee через минуту, а через 2 винамп
то как мне правильно написать?
вот как я написал:
Цитата:

@echo off
if "%1"=="" exit
start %1
if "%2"=="" exit

set HOU=0
set MIN=0

for /f "delims=:, tokens=1,2,*" %%i in ("%TIME%") do (
set HOU=%%i
set MIN=%%j
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set /a MIN=MIN+1

if /i "%MIN%" geq "60" (
set /a MIN=MIN-60
set /a HOU=HOU+1
)

if /i "%HOU%" geq "24" (
set /a HOU=HOU-24
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set nTIME=%HOU%:%MIN%:00
at %nTIME% /interactive "C:\Program Files\ACD Systems\ACDSee\7.0\ACDSee7.exe" "C:\Program Files\Winamp\winamp.exe"
но оно не пашет нормально, т.е. задачи не запускаются :(

Ghost 24.11.2005 06:33

Nicodim
Создаешь файл myStart.cmd (в папке D:\, например):
Код:

@echo off
if '%1'=='' exit
start "myStart" %1
if '%2'=='' exit

set HOU=0
set MIN=0

for /f "delims=:, tokens=1,2,*" %%i in ("%TIME%") do (
  set HOU=%%i
  set MIN=%%j
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set /a MIN=MIN+1

if /i "%MIN%" geq "60" (
  set /a MIN=MIN-60
  set /a HOU=HOU+1
)

if /i "%HOU%" geq "24" (
  set /a HOU=HOU-24
)

for /l %%i in (0,1,9) do if %MIN%==%%i set MIN=0%MIN%

set nTIME=%HOU%:%MIN%:00
at %nTIME% /interactive D:\myStart.cmd %2 %3 %4 %5 %6 %7 %8 %9

И в автозагрузку ставишь:
Код:

D:\myStart.cmd "C:\Program Files\ACD Systems\ACDSee\7.0\ACDSee7.exe" "C:\Program Files\Winamp\winamp.exe"

Nicodim 24.11.2005 10:56

Ghost:
дело вот в чём, запускается только Mystart.cmd и всё, и запускается он через 10 секунд, а не через 1 минуту, и предыдущие батники тоже запускались через 10 секунд, а не через минуту, где собака зарыта?

Ghost 24.11.2005 11:56

Nicodim
ХЗ. Проверял у себя - все работает: после запуска батника, запускается первая прога; ждет до начала следующей минуты (может быть меньше 60 секунд) и запускается вторая прога; дальше оставшиеся проги запускаются с интервалом 1 минута. А myStart.cmd и должен запускаться - а из него в третьей строке запускается сама прога. :(

Nicodim 24.11.2005 12:28

проверял несколько раз, на 2 компах, не пашет, запускается только mystart.cmd и всё :(

Ghost 24.11.2005 12:48

Вложений: 1
Гыхм... Странно... Может будет лучше сделать так? Пишем на TurboPascal'е такую прогу:
Код:

uses
  dos;

var
  h, m, s1, s2, s0:      word;
  NeedSec, WaitSec, Err: integer;

begin
  if ParamCount = 0 then exit;
  val (ParamStr(1), NeedSec, err);
  WaitSec := 0;
  while WaitSec <> NeedSec do begin
    gettime (h, m, s1, s0);
    repeat gettime (h, m, s2, s0) until s2 <> s1;
    inc (WaitSec);
  end;
end.

Компилируем ее и получаем файл wait.exe (см. аттач). Кидаем его в system32, а потом вызываем в батнике с параметром "количество секунд ожидания", например:
Код:

wait 10
И сделать так: создать файл myStart.dat, например:
Код:

10|C:\WINDOWS\notepad.exe
10|C:\WINDOWS\system32\sol.exe

А в автозагрузку впихнуть файл myStart.cmd:
Код:

@echo off
for /f "tokens=1,* delims=|" %%i in (myStart.dat) do (
  wait %%i
  start "" "%%j"
)

Или не сам этот файл а его команду его запуска в background-режиме:
Код:

@start "myStart" /b myStart.cmd

LightImage 24.11.2005 13:03

Немного повторюсь.
Для VBScript не надо никаких компиляторов, имхо редко встретишь машину где бы его не было. Поэтому для выжидания можно использовать файл delay.vbs:
Код:

Option Explicit
Const cdefpause = 10
Dim pause
Dim argvobj
 Set argvobj = WScript.Arguments
 if argvobj.Count < 1 then
  pause=cdefpause
 else
  pause=CLng(argvobj(0))
 end if
 Wscript.Echo WScript.ScriptName & ": Задержка выполнения на " & pause & " секунд"
 MyPause(pause)

sub MyPause(delay)
 WScript.Sleep delay*1000
end sub

Положим этот файл, скажем, в "C:\"
И в батнике пишем:
Код:

cscript /nologo C:\delay.vbs 10
"C:\Program Files\ACD Systems\ACDSee\7.0\ACDSee7.exe"
cscript /nologo C:\delay.vbs 20
"C:\Program Files\Winamp\winamp.exe"

Можно также смело объединять с батником, предложенным Ghost

Nicodim 24.11.2005 13:48

Ghost
получилось всё пашет теперь :beer:

LightImage
запускается у меня почему-то только 1 задача, в данном случае ACDSee, а вот Winamp - нека

LightImage 24.11.2005 14:02

Nicodim
В моём батнике из прошлого поста возможно приходится ждать пока запущенная задача не завершится =) Я этого не учел потому что так проги не запускаю. Чтобы приложения стартовали асинхронно (т.е. приложение запустилось, а батник продолжил выполнение) надо использовать start, как это делает Ghost. Т.е. батник мой перепишется:
Код:

cscript /nologo C:\delay.vbs 10
start "" "C:\Program Files\ACD Systems\ACDSee\7.0\ACDSee7.exe"
cscript /nologo C:\delay.vbs 20
start "" "C:\Program Files\Winamp\winamp.exe"


Nicodim 24.11.2005 15:46

LightImage
теперь работает и у тебя :yees:
в общем цель достигнута, требовалось запускать разные проги через определённое время при загрузке системы только средствами винды, т.е. без какого-то другого софта

bob02 01.02.2007 12:59

сорри за оффтоп.
при прописивании в bat-нике "@echo off" непоказываются команды, но черное окно cmd все же мелькает? есть от него лекарство?

Borland 01.02.2007 13:09

bob02, Нету. Ибо пакетный файл выполняется интерпретатором cmd.exe


Часовой пояс GMT +4, время: 18:35.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.