Привет всем есть сервер к которому по РДП подключаются пользователи, непосредственно на самом сервере под Администратором запускается по расписанию Bat. файл, который запускает 1С УТ 10.3 для выполнения регламентных заданий. Но каждый раз по расписанию запускает новый сеанс в итоге получается несколько запущенных копий которые дублируют выполнение регламентов. Как в батнике прописать что если процесс 1c8v.exe запущен то новую копию не запускать.
---
нужно правильно настроить.
Если использовать батник, то с параметром /wait и без параметра /b.
Запускать нужно не 1cestart.exe, а напрямую нужный 1cv8.exe или 1cv8c.exe
Но и батник вообще не нужен. Можно все в планировщике указать.
Пример вложен. Самое главное добиться, чтоб в "Результат последнего запуска" было "Задание выполняется" или "Экземпляр этой задачи уже выполняется". Последний как раз свидетельствует о том, что новое задание не запустилось, так как предыдущее еще выполняется.

ps. еще преимущество использования планировщика: можно настроить, чтоб по истечении нужного времени задача принудительно завершалась. Тогда запущенная 1С завершится принудительно.
---
Как в батнике прописать что если процесс 1c8v.exe запущен то новую копию не запускать. Ну, если не мудрить с процессами, а делать тупо в лоб, то можно в BAТ перед запуском УТ создавать файл-флажок с определенным именем, по ее завершению - стирать этот файл, а в самом начале BATника проверять наличие этого файла - если присутствует, то ничего не делать.
---
Можете скинуть пример а то с bat. файлами не сильно дружу
---
Может удалять сеанс переда запускам батника?
---
А не проще просто в 1С-ке при запуске проверять - запущен ли уже сеанс под пользователем с этим именем, и если да, то делать отказ на запуск?
---
Как вариант да, но есть вероятность что сеанс может быть зависшим
---
Ну, тогда в любом случае (даже с bat-ником) Вы не узнаете зависший сеанс или нет. Хотя, в таком случае можно принудительно из 1С-ки завершать другой (уже существующий) сеанс с таким же пользователем и запускать новый.
---
А не проще планировщиком стандартным воспользоваться, например сделать заданий открывать и сделать по расписанию закрытие программы.
---
Планировщиком не сильно получиться так как не понятно какое время будут отрабатывать регламенты
---
Ну поставить хотя бы на закрытие, скажем в 23:00 каждого дня.
---
а если регламентное задание ещё не завершилось, и мы его принудительно прибьём?
Тогда уж попробовать в настройках детального расписания указать, когда его завершать ("Завершать через").
---
Можно в bat файле проверить запущен ли процесс 1С, если нет то выполнять запуск.
Google подсказал

```1c
    @Echo Off
    SetLocal EnableExtensions

    Set ProcessName=1cv8.exe
    TaskList /FI "ImageName EQ %ProcessName%" | Find /I "%ProcessName%"
    If %ErrorLevel% NEQ 0 "Здесь кусок запуска если нет процессора"
```
---
Локально на машине отрабатывает идеально но проблема в том что на сервере он видит процессы других пользователей и не запускает 1с
---
Локально на машине отрабатывает идеально но проблема в том что на сервере он видит процессы других пользователей и не запускает 1с Так и надо было сразу говорить, что не процессы надо отслеживать, а работу данного BATника.

Как-то так:

```1c
    @echo off
    if exist "file.flg" goto :EOF
    echo ! > "file.flg"
    if exist "file.flg" start /WAIT "C:\Program Files\1C\..."
    if exist "file.flg" del /Q "file.flg"
```

"file.flg" лучше заменить на полное имя (папка+имя) файла, на запись которого точно есть права, а "C:\Program Files\1C\..." заменить на реальную командную строку запуска УТ
---
@echo off
if exist "file.flg" goto :EOF
echo ! > "file.flg"
if exist "file.flg" start /WAIT "C:\Program Files\1C\..."
if exist "file.flg" del /Q "file.flg"

Везде менять или только в последней строке?
---
Везде менять или только в последней строке? Вам надо чтобы только последняя строка работала? ;)
---
У меня получился такой код. Не отрабатывает просто блымает окно и все закрывается

@echo off
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" goto :EOF
echo ! > "D:\Базы 1с\ЗапускРегламентов\file.flg"
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" start /WAIT "C:\Program Files (x86)\1cv8\common\1cestart.exe" enterprise /F "D:\Базы 1с\УТ" /N"Регламенты" /P"1р1""
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" del /Q "D:\Базы 1с\ЗапускРегламентов\file.flg"
---
Не отрабатывает просто блымает окно и все закрывается Значит, надо отлаживать. Для начала, вот такой текст:

if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" del /Q "D:\Базы 1с\ЗапускРегламентов\file.flg"
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" goto :End
echo ! > "D:\Базы 1с\ЗапускРегламентов\file.flg"
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" start /WAIT "C:\Program Files (x86)\1cv8\common\1cestart.exe" enterprise /F "D:\Базы 1с\УТ" /N"Регламенты" /P"1р1""
if exist "D:\Базы 1с\ЗапускРегламентов\file.flg" del /Q "D:\Базы 1с\ЗапускРегламентов\file.flg"
:End
pause

Строчку "@echo off" - убрать! Запустится ли 1С? Если нет - показать скриншот.
---
(17)У меня получился такой код. Не отрабатывает просто блымает окно и все закрывается

Наверно, это из-за того, что русские названия папок применяли. Замените все названия на исключительно с латинскими буквами. Вам файл флага совсем необязательно в такие папки помещать. Просто поместите в папку c:\1\
---
Наверно, это из-за того, что русские названия папок применяли. Вряд ли: я проверял на длинных именах папок, содержащих кириллицу и пробелы - если такое имя взято в кавычки, то все работает.

Тут либо недостаточно прав на запись в эту папку, либо команда вызова 1С некорректная.

Или еще что-то в системе, что удаленно можно и не угадать.
---
Вряд ли: я проверял на длинных именах папок, содержащих кириллицу и пробелы - если такое имя взято в кавычки, то все работает.

При чем тут взятие в кавычки? Кавычки относятся к пробелам в именах.
 Кириллица не работает, если bat-файл сохранен в кодировке ANSI, которая как раз по-умолчанию часто предлагается. Надо сохранять в кодировке 866, чтоб работало.
---
Надо сохранять в кодировке 866, чтоб работало Ну да, вы правы, просто для меня это само собой разумеется, а как для автора - не знаю.

Вполне возможно, что тут-то собака и порылась, скриншот без "@echo off" это бы показал.
---
Если можно как-то ограничить чтоб проверялись только процессы определенного пользователя было бы вообще супер.
---
В 1С создать Справочник; Туда записывать статус задания;
При запуске из батника проверять, - если статус задания "Уже выполняется" ничего не делаем выходим.
---
вот зачем изобретать велосипед?
Все возможности по озвученным требованиям есть в планировщике Windows.
Самое интересное там есть в настройках параметров задачи.
Если задача уже выполняется, то применять правило:
- Не запускать новый экземпляр;
- Ставить новый экземпляр задания в очередь.
и т.д.

А батник все равно нужно чем-то запускать.
---
Эта галка не отрабатывает она стоит но все равно запускает батник каждый раз по расписанию
---
нужно правильно настроить.
Если использовать батник, то с параметром /wait и без параметра /b.
Запускать нужно не 1cestart.exe, а напрямую нужный 1cv8.exe или 1cv8c.exe
Но и батник вообще не нужен. Можно все в планировщике указать.
Пример вложен. Самое главное добиться, чтоб в "Результат последнего запуска" было "Задание выполняется" или "Экземпляр этой задачи уже выполняется". Последний как раз свидетельствует о том, что новое задание не запустилось, так как предыдущее еще выполняется.

ps. еще преимущество использования планировщика: можно настроить, чтоб по истечении нужного времени задача принудительно завершалась. Тогда запущенная 1С завершится принудительно.
---
наши админы юзали XStarter...
---
Век живи, век учись. Программа для таких нужд просто великолепная. Планировщик заданий отдыхает. А с её функционалом можно ещё кучу рутины автоматизировать и сократить время у компа на несколько процентов.