Имя: Пароль:
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%, автоматом вызовется та которая нужна. Но тогда все-таки придется отслеживать возможность открытия файла, как делал я :(
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.