Имя: Пароль:
1C
1С v8
Батник по запуску нескольких баз 1С 8
, ,
0 Vovka-x13
 
10.03.15
09:50
Нужно по расписанию запускать 1С несколько баз. В батниках плохо разбираюсь, написал следующее:
@echo off
echo Это начало запуска
"C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y_SQL"  
"C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y123_SQL"
echo Это конец
exit

Почти работает, но запускает только первая база, если закрыть её начинает запускаться следующая(выполняться след. команда). И после того как запустилась вторая и её закрыть выходит сообщение "Это конец". Что делаю не так? Странно как то работает ожидал, что все команды будут выполняться без каких либо моих телодвижений.
1 mikecool
 
10.03.15
10:05
используй несколько батников
2 Vovka-x13
 
10.03.15
10:05
Согласен))), но почему так не работает?
3 MiniMuk
 
10.03.15
10:06
попробуй
call "C:\Program Files..
4 mikecool
 
10.03.15
10:06
(2) с чего решил, что должны выполняться все строки параллельно?
5 D_E_S_131
 
10.03.15
10:08
(4) Наверное потому, что Windows многозадачная система. xD
6 Vladal
 
10.03.15
10:10
(0) Используй команду Start

@echo off
echo Это начало запуска
start "C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y_SQL"  
start "C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y123_SQL"

echo Это конец
exit


Если надо вызвать другой батник из батника, используй call

call othet.bat
call other.cmd

(4) С того, что батник запускает виндовые программы, которые выполняются в отдельном потоке.
Это потому, что интерпретатор DOS однопотоковый.
А товарищ в батнике 1С запускает в этом потоке и батник ждет завершение выполнения команды.
7 Vovka-x13
 
10.03.15
10:10
(4) я не сказал параллельно, последовательно.
8 Vladal
 
10.03.15
10:12
А если бы запускать какую другую программу и ждать пока она завершится и после запускать следующую, то так:

start wait program1.exe
start wait program2.exe
9 Vovka-x13
 
10.03.15
10:39
Вот этот вариант работает
@echo off

start "" "C:\Program Files\1cv82\8.2.19.83\bin\1cv8.exe" CONFIG /S"192,,,,\Y"
start "" "C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y123"

Exit
10 Fedor-1971
 
10.03.15
10:58
(9) собственно и первый вариант будет работать, если при старте 1С ты проверишь некоторое условие и организуешь её закрытие.
Схема примерно такая: ПриНачалеРаботыСистемы - проверяем ключ командной строки запуска, выполняем какую-то обработку, завершаем работу 1С.

Если тебе просто надо запустить оговоренные тобой 1С, а закрывать их будет пользователь, то:
start nowait ...
11 Fedor-1971
 
10.03.15
11:01
10+ Сорри, ошибся noWait нету в параметрах start.
запусти cmd и введи start /?. Там ещё много какие параметры есть
12 Vovka-x13
 
10.03.15
11:26
Еще вопрос возник по батникам:
@echo off
setlocal ENABLEDELAYEDEXPANSION
Set Process=1cv8.exe
tasklist | Find /i "%Process%.exe" || (goto Else)
:THEN
Exit
Goto end
:ELSE
start "" "C:\Program Files\1cv82\8.2.19.83\bin\1cv8.exe" CONFIG /S"192,,,,\Y"
start "" "C:\Program Files\1cv8\8.3.5.1248\bin\1cv8.exe" CONFIG /S"192,,,,,\Y123" monitor off
Exit

Исходя из логики этого кода ищется процесс "1cv8.exe" если его нет, то запускается.  Но можно ли сделать поиск процесса не по имени, а по значению колонки которая именуется в диспетчере задач "Command line" т.к. процесс "1cv8.exe" может быть уже запущен, но мне нужно запустить именно эти команды для запуска 1с-ки.
13 ДенисЧ
 
10.03.15
11:31
(12) tasklist не показывает командную строку процесса.
Ищи стороннюю приблуду
14 Vovka-x13
 
10.03.15
11:36
Попробовал по названию окон, если название окна латинскими то работает, если русскими то нет. Как нибудь это побороть можно?
tasklist /FI "WINDOWTITLE eq Конфигуратор*"
15 Fedor-1971
 
10.03.15
11:41
(12)
Set Process=1cv8.exe
tasklist | Find /i "%Process%.exe" || (goto Else)
Ничего не найдёшь убери в одном месте .ехе

(14) Попробуй залить результат работы TaskList в файл и посмотри кодировку, перед поиском по оному
16 Vovka-x13
 
10.03.15
11:49
(15) не совсем понял последнее предложение.
17 Fedor-1971
 
10.03.15
12:01
(16)
Не конвейер: tasklist | Find /i "%Process%.exe" || (goto Else)

А примерно так:
TaskList >d:\11.txt
Find /i "%Process%.exe" d:\11.txt
18 Fedor-1971
 
10.03.15
12:03
17+ кодировку d:\11.txt проверь, Find по умолчанию использует вроде 866, потому и русские буквы не находятся.
19 Vovka-x13
 
10.03.15
12:12
Сделал так

TaskList /v >d:\11.txt
Find /i "Название окна по русски" d:\11.txt

Вроде работает
20 Fedor-1971
 
10.03.15
12:14
вот и хорошо
21 Vladal
 
10.03.15
12:34
А если бы запускать какую другую программу и ждать пока она завершится и после запускать следующую, то так:

start wait program1.exe
start wait program2.exe

(12) Это уже к vbs, коммандный процессор вроде такое не имеет.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан