Войти

Показать полную графическую версию : bat файл, для проверки колва процессов запущенных


Sargezzz
03-04-2018, 18:37
Здравствуйте.

Подскажите, как написать bat файл, который будет отрабатывать след. ситуацию

в диспетчере задач крутятся два процесса одинаковых, под разными PID
proc.exe pid 888
proc.exe pid 999

как проверять, что если таких процессов меньше 2, то запускать службу, например, service1 ?

заранее благодарен!

Iska
03-04-2018, 19:14
@echo off
setlocal enableextensions enabledelayedexpansion

set sFileName=proc.exe

for /f "usebackq delims=" %%i in (`tasklist.exe /nh /fi "IMAGENAME eq %sFileName%" ^| 2^>nul find.exe /i "%sFileName%" ^| find.exe /c /v ""`) do if %%i lss 2 net.exe start "service1"

endlocal
exit /b 0

Казбек
03-04-2018, 19:21
Sargezzz,

@echo off
for /f "tokens=1 delims=" %%# in ('qprocess^|find /i /c /n "proc.exe"') do (
set number=%%#
)
if %number% EQU 1 sc start SharedAccess
SharedAccess - название вашей службы.

Sargezzz
03-04-2018, 19:40
Казбек, подскажите, а как вывести на экран командной строки количество найденных процессов?

у меня такое ощущение, что не находит эти процессы, хотя в диспетчере задач они запущены.

Казбек
03-04-2018, 19:45
подскажите, а как вывести на экран командной строки количество найденных процессов? »

for /f "tokens=1 delims=" %%# in ('qprocess^|find /i /c /n "proc.exe"') do (
set number=%%#
)
pause

Sargezzz
03-04-2018, 19:45
Казбек, по всей видимости он у меня смотрит процессы под моим пользователем, а как смотреть процессы под всеми пользователями? или под определенным?

Iska
03-04-2018, 19:47
а как вывести на экран командной строки количество найденных процессов? »
Оно высчитывается в процессе работы пакетных файлов.

Можете просто посмотреть глазками:
tasklist.exe /fi "IMAGENAME eq proc.exe"
или:
qprocess.exe | find.exe /i "proc.exe"

Sargezzz
03-04-2018, 19:50
Iska, по всей видимости он у меня смотрит процессы под моим пользователем, а как смотреть процессы под всеми пользователями? или под определенным?

Казбек
03-04-2018, 20:08
или под определенным? »


TASKLIST /v /fi "username eq Sargezzz"
Насчет той утилиты, что использовал я, рекомендую к ознакомлению примеры: Windows Server 2008 – How to use the Query Process command (https://uwnthesis.wordpress.com/2013/10/11/windows-server-2008-how-to-use-the-query-process-command/)


он у меня смотрит процессы под моим пользователем »

Да, вы правы:
If you do not specify a process with UserName, SessionName, or SessionID, then QUERY PROCESS will return only the processes that belong to the current user.

Iska
03-04-2018, 20:09
Sargezzz, с tasklist.exe у меня работает. Для qprocess.exe попробуйте изменить строку на:
for /f "tokens=1 delims=" %%# in ('qprocess.exe * ^|find /i /c /n "proc.exe"') do (
или:
for /f "tokens=1 delims=" %%# in ('qprocess.exe "proc.exe" ^|find /i /c /n "proc.exe"') do (

Sargezzz
03-04-2018, 20:09
Iska, Казбек, у меня почему-то скрипт возвращает, что процессов 0, а tasklist.exe видит эти два процесса. Ниже приложил результат выполнения скрипта:

Iska
03-04-2018, 20:13
Sargezzz, смотрите два наших предыдущих сообщения и правьте ранее выложенный код, либо используйте вариант с tasklist.exe.

Sargezzz
03-04-2018, 20:24
Iska, спасибо большое всем. Заработало!




© OSzone.net 2001-2012