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

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

Boria138 16-08-2021 17:26 2964332

Несколько процессов в tasklist find
 
Как сделать так что бы tasklist искал сразу несколько процессов например у нас есть условный блокнот я хочу открывать его через cmd но только если не открыт калькулятор или paint или же блокнот уже не запущен

Код:

@echo off

TIMEOUT /T 5
Set process1=paint.exe calc.exe
set process2=notepad.exe

tasklist /FI "ImageName EQ %process2%" | find /I "%process2%"
If %errorlevel% NEQ 1 goto :ex
:first
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 0 goto :first
taskkill /f /im %process2%
:first
tasklist /FI "ImageName EQ %process2%" | find /I "%process2%"
If %errorlevel% NEQ 1 goto :first

:go
tasklist /FI "ImageName EQ %process1%" | find /I "%process1%"
If %errorlevel% NEQ 1 goto :go
start notepad.exe
goto :first

:ex
exit


alpap 16-08-2021 17:49 2964335

Код:

:: Пропал любой процесс из списка - выполнить команду
@echo off
set "pr1=proc1.exe"
set "pr2=proc2.exe"
cmd /c for /l %%i in () do @for %%p in (%pr1% %pr2%) do @tasklist /fi "imagename eq %%p"^|findstr /v :^|^| (echo Запуск^& exit /b)^&^>nul timeout /t 1 /nobreak
pause

Код:

:: Мониторит открытый калькулятор и блокнот, если пропал калькулятор - закроется и блокнот
@echo off
set "p1=calc.exe"
set "p2=notepad.exe"
cmd /c for /l %%# in () do @tasklist /fi "imagename eq %p1%"^|findstr /v :^|^| (taskkill /f /im "%p2%"^& exit/b)^&^>nul timeout /t 1 /nobreak
pause


megaloman 17-08-2021 08:23 2964356

Я понял, что надо открыть условный "notepad.exe", если не запущены условные ни "notepad.exe" ни "calc.exe" ни "mspaint.exe".
А что если так:
Код:

tasklist |FindStr /B /I /C:"notepad.exe"  /C:"calc.exe" /C:"mspaint.exe" ||Start " " "C:\Windows\System32\notepad.exe"
или втихаря:
Код:

tasklist |>nul FindStr /B /I /C:"notepad.exe"  /C:"calc.exe" /C:"mspaint.exe" ||Start " " "C:\Windows\System32\notepad.exe"
Или, если это только часть большого bat-файла, то ИМХО удобнее так:
Код:

@Echo Off
        Set PgmRun="C:\Windows\System32\notepad.exe"
        Set PgmVeto="notepad.exe" "calc.exe" "mspaint.exe"

        Set "Veto= %PgmVeto%"
        tasklist |>nul FindStr /B /I %Veto: "= /C:"% ||Start " " %PgmRun%
Exit /B 0



Время: 12:42.

Время: 12:42.
© OSzone.net 2001-