Имя: Пароль:
1C
1С v8
Командная строка, последовательное выполнение команд
,
0 tesei
 
14.12.14
16:58
есть два батника, один выгружает базу, другой передает на фтп. Оба успешно запускаются порознь. Требуется запустить команды последовательно в одном батнике, пока не выходит - фтп стартует раньше, чем заказчивается архивирование. Пробовал start "" /wait - не помогает. Команды:

start "" /wait "C:\Program Files (x86)\%platform%\bin\1cv8s.exe" CONFIG /F %database% /DumpIB %file_name%.dt /OUT "backup.log" -NoTruncate

start "" /wait ftp -v -n -s:%file_transport%
1 Рэйв
 
14.12.14
16:59
Как вариант - заверни выполнение батников последовательно в один батник:-)
2 Рэйв
 
14.12.14
17:02
вернее вызов этих батников, если ты понял
3 tesei
 
14.12.14
17:11
(2) запускаются одновременно все равно
4 Garykom
 
гуру
14.12.14
17:11
(0) условие для второго сделай на появление файла, пусть в цикле с паузой крутится и ждет пока не будет готов бэкап
5 spectre1978
 
14.12.14
17:39
(4) да, примерно так, только я делал не проверку на появление файла, а пытался открыть его на запись. Если происходит ошибка доступа, то ждем 20 секунд и опять пытаемся открыть. Когда открылся - выходим из цикла, закрываем файл и делаем выгрузку на FTP.

Правда, я не знаю, подойдет ли для этого BAT. Я на VBS делал.
6 spectre1978
 
14.12.14
17:42
что касаемо /wait, то я так понимаю, это только для консольных приложений работает. Для GUI приложений возможен только вариант (4)-(5).
7 spectre1978
 
14.12.14
17:46
условие на появление файла не работает, потому как файл-то появляется почти сразу, но записываться он может очень долго. У меня - минут 30-40.
8 Chameleon1980
 
14.12.14
17:48
а call не?
9 spectre1978
 
14.12.14
17:51
(8) я не знаю. Там проблема в том что приложение стартует, создает файл, батник в это время может продолжать выполнять любые команды по списку, но файл архива нельзя использовать неопределенно долгое время, пока он не будет полностью записан. Как тут колл поможет?
10 Chameleon1980
 
14.12.14
17:52
просто припоминается с доса еще - что-то типа того, что CAll пока не выполнится далее батник не выполняется
11 Chameleon1980
 
14.12.14
17:53
описание help call длинное, но вот кусок:

Для выхода из такого
пакетного файла необходимо дважды достичь его конца.  Первый
выход возвращает управление на инструкцию, расположенную
сразу после строки CALL, а второй выход завершает выполнение
пакетного файла.
12 spectre1978
 
14.12.14
17:54
(10) дос однозадачная среда, там приложения за исключением резидентов выполнялись одно за другим. Виндовые ГУИ приложения выполняются параллельно и их одновременно может быть в памяти сколько хочешь. Батник не дожидается кода завершения от них. Запускает и продолжает дальше выполнять команды.
13 Chameleon1980
 
14.12.14
17:56
можно в одном сделать, но чтобы быстро:

первый батник
call второй батник.bat
call третий батник.bat

второй батник - формируем файл
третий - отправляем

какая разница что немногозадачная
второй колл в батнике не выполнется пока первый не вернется
хотя.... пробовать нужно
14 Chameleon1980
 
14.12.14
17:59
из фара по контрл интер запусти любой док файл - следующий ты не запустишь из этого экземпляра пока первый док файл не закроешь в ворде.
Так может ясней будет. Фар будет ждать пока ты не закончишь с файлом работать.
15 spectre1978
 
14.12.14
18:00
я попробовал, в простейшем случае получилось

!start.cmd:
echo batch started
call 1c.cmd
echo 1c has been started

1c.cmd:
"c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe"

сообщение 1c has been started не появляется, пока я не закрою окно выбора базы. Т.е. похоже, что работает
16 Chameleon1980
 
14.12.14
18:02
ну вот
17 Chameleon1980
 
14.12.14
18:02
тоже счас для успокоения попробовал

call d:\1.doc
echo 1
echo 2
echo 3
18 mehfk
 
14.12.14
18:09
(17) Теперь так проверь

start "" /wait d:\1.doc
echo 1
echo 2
echo 3

(0) Должно работать как у тебя написано.
19 spectre1978
 
14.12.14
18:13
Заменил строку в файле 1c.cmd на такую:

"c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe" CONFIG /F "D:\1c8Local\UPP\" /DumpIB D:\1.dt /OUT "d:\backup.log" -NoTruncate /NXXXX /PYYYY

Работает. Копия делается, третья строка первого батника не выполняется. Отличное решение.
20 tesei
 
14.12.14
18:36
(19) не понял, что значит "третья строка первого батника"?

(4) написал код, пока не работает, где ошибка?

FOR /L %%i IN (1,1,60) DO IF EXIST %file_name% ftp -v -n -s:%file_transport% && goto m1 ELSE TIMEOUT /T 60 /NOBREAK
21 Chameleon1980
 
14.12.14
18:45
(20) от создания файла до последней записи много времени?
подчеркиваю не от запуска первой строки батника, а именно от создания?
может
DO IF EXIST
он создался но еще не дописался до конца *???
22 spectre1978
 
14.12.14
19:03
(20) запускающий батник:
echo batch started
call 1c.cmd
echo 1c has been started

Батник 1c.cmd, выполняющий архивацию
"c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe" CONFIG /F "D:\1c8Local\UPP\" /DumpIB D:\1.dt /OUT "d:\backup.log" -NoTruncate /NXXXX /PYYYY

вместо строки
echo 1c has been started
в первом батнике можно писать код отправки файла по FTP, он выполнится только после того как отработает архивация.
23 spectre1978
 
14.12.14
19:07
(20) IF EXIST не будет работать, потому что dt-файл создается практически сразу после запуска, но он остается монопольно открытым в течение неопределенного времени, пока не будет завершен процесс создания дампа. Для больших баз это может измеряться десятками минут и часами.
24 spectre1978
 
14.12.14
19:10
... и главное, как выяснилось, это не нужно. call полностью спасает отца русской демократии - управление в первый батник не возвращается, пока не завершится процесс во втором.
25 tesei
 
14.12.14
19:19
echo работает, ftp все равно хочет запускаться раньше :(
26 Chameleon1980
 
14.12.14
20:10
ну я какбэ с call и начинал
просто думал проблема осталась и мы все еще ищем решение.
27 spectre1978
 
14.12.14
21:29
(25) поменял последнюю строку первого файла на ftp.
Запустил.
Архивация идет, ftp пока не вызвалось.
Что я делаю не так?
28 spectre1978
 
14.12.14
21:30
Пока выглядит вот так
D:\>"!start.cmd"

D:\>echo batch started
batch started

D:\>call 1c.cmd

D:\>"c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe" CONFIG /F "D:\1c8Local\UPP\" /DumpIB D:\1.dt /OUT "d:\backup.log" -NoTruncate /NОбслуживание /Pservice123
29 spectre1978
 
14.12.14
21:30
эх, пароль засветил. Ну да ладно
30 tesei
 
14.12.14
21:39
(27) Че-то я перегрелся. Завтра все пересмотрю. Благодарю за помощь!
31 spectre1978
 
14.12.14
21:59
(30) база сархивировалась, соответственно вид поменялся
D:\>"!start.cmd"

D:\>echo batch started
batch started

D:\>call 1c.cmd

D:\>"c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe" CONFIG /F "D:\1c8Local\UPP\" /DumpIB D:\1.dt /OUT "d:\backup.log" -NoTruncate /N... /P...

D:\>ftp
ftp>
32 spectre1978
 
14.12.14
22:03
да нет, похоже что с call все работает.
.
Единственное что еще может влиять - это что именно используется в качестве стартера. У меня - "c:\program files (x86)\1cv82\8.2.19.76\bin\1cv8.exe". А вот, например, 1сestart может вызывать необходимую версию клиента платформы и завершаться, что приведет к переходу управления после call раньше времени. Этот момент нужно учесть. Не происходит ли у вас чего-то подобного?
33 spectre1978
 
14.12.14
22:08
Да! Проверил. 1с8s.exe дает именно такой эффект.
Попробуйте 1cv8.exe вместо 1cv8s.exe.
34 spectre1978
 
14.12.14
22:11
1cv8s на самом деле стартует 1cv8 и прекращает работу
35 tesei
 
15.12.14
01:06
(34) да, переписал, все работает! Огромное спасибо и респект! :)
36 tesei
 
15.12.14
01:20
Интересный феномен: если 2 бат файла, то архивируется нормально, если все в одном бат файле, то получается расширение n1.
37 lxndr
 
15.12.14
07:25
символ &
38 spectre1978
 
15.12.14
08:15
на самом деле правильнее юзать 1cestart, в этом случае можно не заморачиваться с %platform%, автоматом вызовется та которая нужна. Но тогда все-таки придется отслеживать возможность открытия файла, как делал я :(