|
Как заставить bat-файл дождаться окончания выгрузки 1С | ☑ | ||
---|---|---|---|---|
0
AlexYurg
06.08.18
✎
17:38
|
Есть пакетный файл, содержащий строку вида
"C:\...\1cv8.exe" DESIGNER /S Сервер\База /N ... /P ... /DumpIB File.DT В этом месте необходимо дождаться, когда закончится выгрузка в File.DT, т.к. дальше там идет загрузка из этого файла в другую базу. На платформе 1С 8.2 (8.2.19.130) это работало без проблем, а на 8.3 (8.3.12.1567) проскакивает на следующую строку батника, т.е. пытается грузить из файла, который еще не сформирован. Вопрос: почему так происходит и как заставить батник дождаться окончания выгрузки? |
|||
1
SilentMan
06.08.18
✎
17:42
|
start /wait ?
|
|||
2
AlexYurg
06.08.18
✎
17:44
|
(1) Сейчас попробую...
|
|||
3
AlexYurg
06.08.18
✎
17:47
|
(1) Ошибка: "Не удается найти DESIGNER ..."
Я уже прочно забыл эти батники, как там писать start? |
|||
4
AlexYurg
06.08.18
✎
17:50
|
Посмотрел синтаксис START, похоже надо делать несколько батников. Как-то это некрасиво.
Другие мысли есть у кого-нибудь? |
|||
5
Локи-13
06.08.18
✎
17:50
|
напиши на powershell
|
|||
6
Локи-13
06.08.18
✎
17:52
|
$EXE="C:\Program Files (x86)\1cv8\8.3.10.2699\bin\1cv8.exe"
$arglist = @("DESIGNER", "/S $SERVERNAME\$IBNAME", "/N $ADMINNAME", "/P $ADMINPASS", "/UpdateDBCfg") & $EXE $arglist | Out-Null |
|||
7
alkras
06.08.18
✎
17:54
|
setlocal enabledelayedexpansion
set count=0 set month=1%date:~3,2% set /a month-=100 for %%a in (Январь Февраль Март Апрель Май Июнь Июль ^ Август Сентябрь Октябрь Ноябрь Декабрь) do ( set /a count+=1 if !count! equ %month% (set m=%%a)) md "i:\BaseCopy\%m%\uat\" echo Текущий месяц %m% set v8exe="c:\Program Files (x86)\1cv82\8.2.19.83\bin\1cv8.exe" set AdminUser=/N"UserAdmin" /P"PassAdmin" /WA- set FileInformation=i:\BaseCopy\%m%\error_log.txt date /t >> %FileInformation% time /t >> %FileInformation% rem ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- rem Создание копии UAT set DataBaseName="Server/uat" set DataBase=/S%DataBaseName% set DataBaseName>>%FileInformation% rem Завершение работы пользователей start "" /wait %v8exe% ENTERPRISE %DataBase% %AdminUser% /C"ЗавершитьРаботуПользователей" /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate /DisableStartupMessages set filebak="i:\BaseCopy\%m%\uat\%date% %time:~-11,2%-%time:~-8,2%-%time:~-5,2% SQL УАТ.dt" start "" /wait %v8exe% CONFIG %DataBase% %AdminUser% /DumpIB%filebak% /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate rem Разрешение работы пользователей start "" /wait %v8exe% ENTERPRISE %DataBase% %AdminUser% /C"РазрешитьРаботуПользователей" /UC"ПакетноеОбновлениеКонфигурацииИБ" /Out%FileInformation% -NoTruncate /DisableStartupMessages |
|||
8
alkras
06.08.18
✎
17:55
|
Раньше пользовался таким скриптом. Все корректно работало с ежедневным сохранением в нужные папки.
|
|||
9
AlexYurg
06.08.18
✎
17:55
|
(6), (7) Круто! Спасибо, попробую!
|
|||
10
Cthulhu
06.08.18
✎
18:30
|
(4): да норм.
никто же не мешает из твоего батника запилить какие надо ( echo > / echo >> ) потом запустить их потом подтереть за собой... |
|||
11
Сияющий в темноте
06.08.18
✎
22:42
|
И чем VbScript не угодил?
там даже обьект есть для запуска без окошка и ожидания завершения |
|||
12
AlexYurg
07.08.18
✎
09:20
|
(11) Вся проблема как раз в ожидании завершения.
Нужно, чтобы было ожидание, и в 8.2 оно было, а в 8.3 пропало. Из-за этого и возник вопрос, как вернуть ожидание завершения. |
|||
13
spectre1978
07.08.18
✎
09:24
|
(12) оно не пропало. Скорее всего проблема в том, что запускается стартер, который запускает другой процесс и выходит. Нужно посмотреть, что происходит при запуске, какие процессы рожаются. И запускать именно конечный, последний процесс, а не то что прописано в ярлыке.
|
|||
14
AlexYurg
07.08.18
✎
09:33
|
(13) Нет, не стартер. Запускается напрямую 1cv8.exe из нужной папки. Такой же процесс появляется в памяти.
Пробовал запускать 1cv8s.exe - та же беда - не ждет. |
|||
15
Мыш
07.08.18
✎
09:36
|
(14) Асинхронный вызов нельзя сделать?
|
|||
16
spectre1978
07.08.18
✎
09:38
|
Вопросы по бат файлам.
start /wait /D "C:\Program Files (x86)\1cv8\8.3.11.2867\bin\" 1cv8.exe echo Тру-ля-ля Надпись появляется после того как закрыли 1С |
|||
17
spectre1978
07.08.18
✎
09:39
|
у меня тоже были подобные проблемы, но в конце концов выяснилось что дело было в стартере. В случае с выгрузкой есть еще один вариант с попыткой открытия dt-файла - в приведенном топике я об этом писал. Когда откроется - значит, 1С закончила работу. Я такое на VBS делал.
|
|||
18
Serg_1960
07.08.18
✎
09:55
|
Start "Backup" /Wait "C:\Program Files (x86)\1cv8\common\1cestart.exe"...
:repeat TimeOut /T 10 tasklist | find "1cv8.exe" if errorlevel 0 GOTO repeat |
|||
19
mistеr
07.08.18
✎
09:59
|
(18) Ничего, что еще кто-то может внезапно запустить 1С для своих целей?
|
|||
20
mistеr
07.08.18
✎
10:00
|
(14) Возьми Process Explorer да посмотри, кто кого запускает.
|
|||
21
Serg_1960
07.08.18
✎
10:34
|
(19) Не принципиально при определенных условиях. Например, когда батник работает ночью, когда пользователей нет и/или некому запустить сеанс на конкретном компе.
|
|||
22
Мыш
07.08.18
✎
10:55
|
И вообще агента Смита запустить можно и на каком-нибудь питоне автоматизировать.
|
|||
23
AlexYurg
07.08.18
✎
11:33
|
Джентльмены, произошло чудо!
Ожидание вернулось само собой. В результате упражнений с батником обнаружилось, что поведение 1С-ки вернулось к тому, что было в 8.2, т.е. батник сам дожидается окончания выгрузки. Без всяких start /wait и прочих хитростей. Что это было - не понятно. Глюк, одним словом. Всем спасибо за обсуждение и советы! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |