Створення bat файлу, який би запускав інший файл після певного терміну архів

а може є якісь стандартні параметри запуску процесу через певний термін засобами вінди?

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

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

мені якраз потрібно щоб проги стартували не всі відразу, а після певного часу при завантаженні системи
Є досить багато подібних програм, наприклад, Absolute StartUp.

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) loop
end sub
(Про WScript.Sleep я тоді не знав =))
З батника викликаю так:

cscript / nologo delay.vbs 300

Гихм. А як щодо того, щоб скористатися стандартним планувальником? І командою 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%

echo% TIME% -% nTIME%;)

Ghost:
Залишається тільки визначити час, тобто додати до поточного часу якась кількість секунд:
можеш написати як буде виглядати батник який би запускав notepad через 30 секунд?

Взагалі-то ось так: @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%

at% nTIME% / interactive% windir% \ notepad.exeТолько ось цей урод (шедулера мається на увазі) чомусь секунди не підхопив, тобто мінімальний інтервал - хвилина. (Шукаю рішення.

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

В секундах поки не виходить - не хоче планувальник з ними працювати. (Тільки з інтервалом в декілька хвилин. Ось так: @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%

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

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%

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"

але воно не оре нормально, тобто завдання не запускаються :(

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%

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 "

Ghost:
справа ось в чому, запускається тільки Mystart.cmd і все, і запускається він через 10 секунд, а не через 1 хвилину, і попередні батники теж запускалися через 10 секунд, а не через хвилину, де собака заритий?

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

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

Гихм. Дивно. Може буде краще зробити так? Пишемо на 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

Трохи повторюся.
Для 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