Как определить, запущен ли процесс внутри командного файла? - PullRequest
8 голосов
/ 19 ноября 2008

Я хотел бы написать командный файл, который проверяет, запущен ли процесс, и выполняет одно действие, если оно есть, и другое действие, если это не так.

Я знаю, что могу использовать список задач для перечисления всех запущенных процессов, но есть ли более простой способ напрямую проверять определенный процесс?

Кажется, это должно работать, но это не так:

tasklist /fi "imagename eq firefox.exe" /hn | MyTask
IF %MyTask%=="" GOTO DO_NOTHING
'do something here
:DO_NOTHING

Используя решение, предоставленное Atzz, вот полная рабочая демонстрация:

Редактирование: упрощено и изменено для работы как в WinXP, так и в Vista

echo off

set process_1="firefox.exe"
set process_2="iexplore.exe"
set ignore_result=INFO:

for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq %process_1%"`) do if not %%A==%ignore_result% Exit
for /f "usebackq" %%B in (`tasklist /nh /fi "imagename eq %process_2%"`) do if not %%B==%ignore_result% Exit

start "C:\Program Files\Internet Explorer\iexplore.exe" www.google.com

Ответы [ 2 ]

6 голосов
/ 19 ноября 2008

Вы можете использовать конструкцию "for / f" для анализа вывода программы.

set running=0
for /f "usebackq" %%T in (`tasklist /nh /fi "imagename eq firefox.exe"`) do set running=1

Кроме того, это хорошая идея, чтобы вставить

setlocal EnableExtensions

в начале вашего скрипта, на тот случай, если пользователь отключил его по умолчанию.

2 голосов
/ 19 ноября 2008

Некоторые опции:

  • PsList от Microsoft

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps

  • Cygwin (для пс)
  • набор ресурсов (для ps.vbs)

http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/win2kcommands_0401.html#ps

  • Powershell для get-процесса.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...