Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как узнать запущен ли батник или нет (http://forum.oszone.net/showthread.php?t=347095)

kjuoky 22-11-2020 02:53 2940679

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

sov44 22-11-2020 08:04 2940681

Проверку работающего бантика можно сделать через маркерный файл. При закрытии бантика маркерный файл должен удаляться. При повторном запуске планировщика, батник ищет маркерный файл, если находит, то закрывается.

alpap 22-11-2020 14:16 2940705

Цитата:

Цитата kjuoky
добавить в шедулер задание на автоматический запуск этого файла »

Цитата:

Цитата kjuoky
если батник уже запущен то не запускать его второй инстанс »

в планировщике во вкладке параметры при создания задания уже по умолчанию стоит "Не запускать второй экземпляр", поэтому ничего не требуется больше.

kjuoky 22-11-2020 18:15 2940722

Вот это да! А я мучался :)
Спасибо большое!

alpap 23-11-2020 00:02 2940748

Да и кстати. Задача новая выполнятся-то не будет, а вот окно новое процесса вероятно будет появляться и возможно мешать. Чтобы при запущенном процессе "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 2940809

И ещё раз спасибо!


Время: 05:04.

Время: 05:04.
© OSzone.net 2001-