Как проверить запущена ли программа bat

Содержание

Не так давно ко мне обратились за помощью в реализации такого костыля.

Чтобы он мониторил через какое-то время процесс и если он не запущен автоматически запускал.

первый вариант выглядел вот таким образом:

:proverka
tasklist | find «mspaint.exe»

if %ERRORLEVEL% EQU 1 goto restart
if %ERRORLEVEL% EQU 0 goto vremya

:vremya
timeout 10
goto proverka

:restart
start %windir%system32mspaint.exe
goto proverka

Как проверить, запущен ли процесс через пакетный скрипт

Как я могу проверить, запущено ли приложение из пакетного (хорошо cmd) файла?

Мне не нужно запускать другой экземпляр, если программа уже запущена. (Я не могу изменить приложение, чтобы сделать его только один экземпляр.)

Также приложение может работать как любой пользователь.

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

Еще одна возможность, которую я придумал, вдохновленная использованием grep :

Скинул WinLock школьнику + мамка


tasklist /FI «IMAGENAME eq myapp.exe» 2>NUL | find /I /N «myapp.exe»>NUL if «%ERRORLEVEL%»==»0» echo Program is running

Не нужно сохранять дополнительный файл, поэтому я предпочитаю этот метод.

это работало для меня хорошо (Windows XP SP3). ИМХО, это самый элегантный способ из всех предложенных здесь, с использованием только инструментов, поставляемых с Windows

У меня была проблема с синтаксисом этой командной строки. Я изменил его на tasklist /FI «IMAGENAME eq winword.exe» 2>NUL | find /I /N «winword.exe»>NUL / if %ERRORLEVEL%==1 goto wordnotrunning для того, чтобы заставить его работать (подозревая цитату вокруг частей if

Помните, что в других языковых версиях XP имена фильтров были переведены в код, но не в /? экран справки . Так, например, IMAGENAME в польской версии есть NAZWA_OBRAZU .

Под Win7 мне пришлось поменять его на tasklist /FI «IMAGENAME eq myapp.exe» /NH | find /I /N «myapp.exe» >NUL Первый NUL кажется ненужным, я понятия не имею, для чего нужен «2», / NH не обязателен.

список задач всегда выходит со статусом 0 независимо от того, находит ли он какие-либо подходящие задачи, поэтому он сам по себе бесполезен. Поскольку вы все равно должны использовать find (или findstr) для проверки его вывода, нет смысла использовать фильтры списка задач. Просто сделай список задач | найти «myprog.exe»> nul: goto foundit или somesuch. Вам может понадобиться параметр / v (подробный) для списка задач.

Вот как я это сделал:

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log FOR /F %%A IN (search.log) DO IF %%~zA EQU 0 GOTO end start notepad.exe :end del search.log

Читайте также:
Как составить программу для вебинара

Приведенное выше откроет Блокнот, если он еще не запущен.

Изменить: Обратите внимание, что это не найдет приложения, скрытые от списка задач. Это будет включать любые запланированные задачи, выполняемые от имени другого пользователя, поскольку они автоматически скрываются.

Как создать bat файл в Windows

Изменение формата списка задач на CSV или на что угодно, кроме таблицы, важно, потому что это макет (таблица) списка задач по умолчанию усекает длинные имена изображений, что нарушает логику.

Это решение не будет работать в Vista, потому что TASKLIST производит некоторые выходные данные, даже если процесс не найден. Я предполагаю, что то же самое верно для Windows 7.

не работает в Windows 10. search.log содержит «INFO: не выполняются задачи, соответствующие указанным критериям». и блокнот не запускается

Мне нравится решение Chaosmaster! Но я искал решение, которое не запускает другую внешнюю программу (например, find.exe или findstr.exe ). Поэтому я добавил идею из решения Мэтта Лейси, которое создает временный файл, которого можно избежать. В конце я смог найти довольно простое решение, поэтому я поделился им .

SETLOCAL EnableExtensions set EXE=myprog.exe FOR /F %%x IN (‘tasklist /NH /FI «IMAGENAME eq %EXE%»‘) DO IF %%x == %EXE% goto FOUND echo Not running goto FIN :FOUND echo Running :FIN

Это хорошо работает для меня .

Это решение хорошо работает — проверено в Windows 8.1. Я заметил, что он чувствителен к регистру.
Хорошо работает для меня — проверено в Windows 7 X64

Это не работает, если в имени приложения есть пробел, так как% x оказывается частью имени приложения до первого пробела.

Возможным решением было бы проверить, не найдено ли приложение, вместо этого, проверив% x == INFO: но я не знаю, на каких версиях Windows это будет работать или есть лучшее решение.

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

QPROCESS «myprocess.exe»>NUL IF %ERRORLEVEL% EQU 0 ECHO «Process running»

Приведенный выше код был протестирован в Windows 7 с пользователем с правами администратора.

Я просто использовал эту идею, чтобы дважды остановить автоматизированный процесс, и это сработало как шарм!

Должен сказать, что в отличие от этой команды, решения для списка задач не только выглядят слишком сложными для такого простого запроса, но и запускают примерно секунду и используют тонны процессора! Это намного лучше, также работает без прав администратора (Windows Server 2012).

Это, кажется, самое простое и лучшее решение (по крайней мере для меня), поскольку оно работает как есть, когда в имени приложения есть пробелы. Мне любопытно, каковы ограничения этого решения и почему у него нет больше голосов.

В Windows вы можете использовать инструментарий управления Windows (WMI), чтобы убедиться, что не запущены приложения с указанной командной строкой, например:

wmic process where (name=»nmake.exe») get commandline | findstr /i /c:»/f load.mak» /c:»/f build.mak» > NUL (echo THE BUILD HAS BEEN STARTED ALREADY! > %ALREADY_STARTED% если у вас его нет, а Only the administrator group members can use WMIC.EXE. затем Reason:Win32 Error: Access is denied.

я думаю, что это лучшее решение, потому что wmic дает вам полную запущенную командную строку и предоставляет другую информацию .

Читайте также:
Comodo internet security описание программы

TASKLIST | FINDSTR ProgramName || START «» «PathProgramName.exe»

Это на самом деле прекрасно работает. Просто! Только знайте, что это чувствительно к регистру, если вы не добавите /i .

Я использую PV.exe с http://www.teamcti.com/pview/prcview.htm, установленный в Program Files PV с командным файлом, подобным этому:

это работает для меня в Windows 7. 2-я строка — это каталог, в котором находится программа, а не сама программа.

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

Измененный ответ TrueY:

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

Ответ предоставляется Matt Lacey работает для Windows XP. Однако в Windows Server 2003 строка

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log

ИНФОРМАЦИЯ: Не выполняются задачи, соответствующие указанным критериям.

который затем читается при запуске процесса.

У меня нет опыта работы с пакетными сценариями, поэтому мое решение состоит в том, чтобы затем искать имя процесса в search.log файле и закачивать результаты в другой файл и искать его для любого вывода.

tasklist /FI «IMAGENAME eq notepad.exe» /FO CSV > search.log FINDSTR notepad.exe search.log > found.log FOR /F %%A IN (found.log) DO IF %%~zA EQU 0 GOTO end start notepad.exe :end del search.log del found.log

Я надеюсь, что это помогает кому-то еще.

Это работает для Win 2008. +1 для Нет запущенных задач, которые соответствуют указанным критериям.

Я вроде WMIC и TASKLIST инструментов , но они не доступны в доме / основные изданиями windows.Another способа является использование QPROCESS команд доступны на почти каждое окно машины (для тех , которые имеют терминальные услуги — Я думаю , что только выиграть XP без SP2, так practialy каждого окна машины):

QPROCESS Команда не настолько мощна, как TASKLIST и ограничена отображением только 12 символов имени процесса, но ее следует учитывать, если TASKLIST она недоступна.

Более простое использование, когда в качестве аргумента используется имя процесса ( .exe суффикс является обязательным в этом случае, когда вы передаете имя исполняемого файла):

Разница между двумя способами QPROCESS использования заключается в том, что QPROCESS * будут перечислены все процессы, в то время как QPROCESS some.exe будут фильтроваться только процессы для текущего пользователя.

Использование WMI объектов через exe- WMIC файл сценария Windows вместо этого также является опцией. Его следует запускать также на каждой машине Windows (исключая те, где WSH выключен, но это редкий случай). Здесь находится файл bat, в котором перечислены все процессы через WMI классы и могут использоваться вместо QPROCESS приведенного выше сценария (это гибрид jscript / bat и должен быть сохранен как .bat ):

И модификация, которая проверит, запущен ли процесс:

Два варианта могут быть использованы на машинах, которые не имеют TASKLIST .

Конечная техника использует MSHTA . Это будет работать на каждой машине с Windows от XP и выше и не зависит от настроек хоста скрипта Windows. MSHTA хотя вызов может немного снизить производительность (опять же следует сохранить как bat):

Читайте также:
Как установить программу сканирования hp

Источник: qastack.ru

CMD/BAT: Запуск батника с проверкой на наличие установленной программы

Нужна помощь, есть батник который отрабатывает для определенной программы, но проблема в том что он отрабатывает без разницы, установлена та программа или нет. Вот и хотелось бы добавить в такой батник строки которые бы проверяли наличие установленной программы, а только после отрабатывала бы его остальная часть. Можно ли это реализовать ?

2 Ответ от Rumata 2015-09-23 10:31:18

  • Rumata
  • Разработчик
  • Неактивен

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

set «prog=C:Program Files (x86)Microsoft OfficeOffice15WINWORD.EXE» if exist «%prog%» ( rem do something before launching start «» «%prog%» %* rem do something after )
( 2 * b ) || ! ( 2 * b )

3 Ответ от artyom.liovin 2015-09-23 10:45:09 (изменено: artyom.liovin, 2015-09-23 11:19:29)

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

Rumata пишет:
set «prog=C:Program Files (x86)Microsoft OfficeOffice15WINWORD.EXE» if exist «%prog%» ( rem do something before launching start «» «%prog%» %* rem do something after )

Извиняюсь но че та не работает, если программа не установлена то остальная часть батника всё равно отрабатывает, остальная часть батника это вот эти строки (пример)

REG ADD «HKLMSOFTWARE12212345» /f /v «Blob» /t REG_BINARY /d 11ab0000010000003b0000004b4c

reg import act.reg

4 Ответ от Rumata 2015-09-24 13:20:28

  • Rumata
  • Разработчик
  • Неактивен

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

Думать совсем не хотите. Там же написано

если программа существует
if exist «%prog%» (
rem сделать что-то до запуска

запустить программу
start «» «%prog%» %*

rem сделать что-то после
)

Вот вам инверсный вариант

set «prog=C:Program Files (x86)Microsoft OfficeOffice15WINWORD.EXE» rem если программы нет, то вывести сообщение об ошибке и завершить скрипт if not exist «%prog%» ( echo:ERROR: Binary not found: %prog% exit /b 1 ) rem программа есть — надо что-то сделать start «» «%prog%» %*
( 2 * b ) || ! ( 2 * b )

5 Ответ от artyom.liovin 2015-09-25 22:33:57

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

Rumata
Спасибо большое при большое, теперь всё понятно, и всё работает

6 Ответ от Flasher 2015-10-08 21:33:41

  • Flasher
  • Заблокирован
  • Неактивен

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

Если говорить всё же об установленных программах, а не оставшихся, например, после переустановки ОС в системной папке, то вариант должен быть примерно таким:

Медленно, но верно.

7 Ответ от ihoming 2015-11-06 11:55:18

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

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

Мне нужен батник, который должен определить наличие установленной на компьютере программы, при её наличии ничего не делать, а при её отсутствии установить данную программу из указанной папки этого же компьютера.

Например, узнать установлена программа в директории:
C:Program FilesLanGame++.exe

Если её нет, то установить её из директории:
C:GamesLanGame_setup.exe

И возможно ли в одном батнике проверить таким же образом другие установленные программы?

Заранее спасибо за помощь!

8 Ответ от Flasher 2015-11-06 14:13:47

  • Flasher
  • Заблокирован
  • Неактивен

Re: CMD/BAT: Запуск батника с проверкой на наличие установленной программы

ihoming
А что там сложного?
С проверкой файла:

С проверкой установки:

Источник: forum.script-coding.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru