Войти

Показать полную графическую версию : [решено] Как узнать запущен ли батник или нет


kjuoky
22-11-2020, 02:53
Здравствуйте, подскажите пожалуйста как решить проблему.
Есть у меня батник с youtube-dl который я хочу что бы он работал круглосуточно.
Но иногда когда мне нужна вся полоса пропускания я его закрываю.
Хочу добавить в шедулер задание на автоматический запуск этого файла.
Проблема как сделать так что бы если батник уже запущен то не запускать его второй инстанс.
Так как на компе youtube-dl используется активно то проверка через tasklist отпадает.
Пока нашёл выход в использование cmdow но интересуюсь нет ли способа
решить проблему нативными средствами.
Впрочем узнать о не нативных способах тоже интересно. Знание сила!
Спасибо.

sov44
22-11-2020, 08:04
Проверку работающего бантика можно сделать через маркерный файл. При закрытии бантика маркерный файл должен удаляться. При повторном запуске планировщика, батник ищет маркерный файл, если находит, то закрывается.

alpap
22-11-2020, 14:16
добавить в шедулер задание на автоматический запуск этого файла »
если батник уже запущен то не запускать его второй инстанс »
в планировщике во вкладке параметры при создания задания уже по умолчанию стоит "Не запускать второй экземпляр", поэтому ничего не требуется больше.

kjuoky
22-11-2020, 18:15
Вот это да! А я мучался :)
Спасибо большое!

alpap
23-11-2020, 00:02
Да и кстати. Задача новая выполнятся-то не будет, а вот окно новое процесса вероятно будет появляться и возможно мешать. Чтобы при запущенном процессе "name.bat" и повторном его запуске чем угодно не появлялось новых процессов и окон соответственно и работал именно первый запущенный процесс этого имени, можно использовать вот такую вставку в bat который будет запускаться:

@echo off
:: Проверка на запущенный процесс "%~nx0" [отсюда и до строки :: Рабочий код ничего не изменять и не трогать]

:: ----------------------------------------------
set "Processid="
for /f %%a in ('wmic process where "name='cmd.exe' and Commandline like '%%%~nx0%%' and not Commandline like '%%|%%'" get Processid /value^|find "="') do (
set /a n+=1& if not defined Processid set "%%a"
)
if %n% gtr 1 wmic process where "name='cmd.exe' and Commandline like '%%%~nx0%%' and not Commandline like '%%|%%' and not Processid='%Processid%'" delete
:: ----------------------------------------------

:: Рабочий код
echo Hello!
:: При запущенном процессе и повторном его запуске дозаписи в файл не произойдет
echo Proba>>file.txt
pause

kjuoky
23-11-2020, 16:42
И ещё раз спасибо!




© OSzone.net 2001-2012