2

Я нашел это в stackoverflow, и это код такой:-

@echo off
Set "MyProcess=calc.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%">nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "%MyProcess%")
pause 

Но моя проблема в другом. По словам Заголовка, я хочу постоянно проверять, запущена ли программа. Так что я сделал МОЙ пакетный файл вот так.

@echo off
:B
Set "MyProcess=cmd.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "1.bat","" "2.bat", "" "3.bat")
goto B    

Который, кажется, тоже не работает.

И самое сложное из всех, я просто новичок в партии, поэтому я не понимаю большинство вещей здесь

Благодарю вас.

1 ответ1

2

Проверьте, запущен ли процесс или нет, и запустите несколько программ, если нет, и завершите работу.

Я хочу постоянно проверять, работает ли программа

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

Если он не запущен, вызывайте пакетные сценарии один за другим; в противном случае перейдите к процедуре :B и начните проверку заново. Если он запущен, то выполните ECHO "%MyProcess%" est en cours d^'execution а затем перейдите к процедуре :B и проверьте еще раз для подтверждения (непрерывная проверка).

ВНИМАНИЕ: Убедитесь, что у вас есть GOTO EOF в конце вызываемых пакетных сценариев и НЕ EXIT иначе они не передадут управление вызывающей стороне, чтобы исходный пакет мог продолжить проверку цикла. (см. ниже пример CALLED SCRIPT ПРИМЕР).

СЦЕНАРИЙ, КОТОРЫЙ ИМЕЕТ ПРОВЕРКУ ЛОГИКИ (используйте эту)

@ECHO OFF
:B
SET MyProcess=cmd.exe
ECHO "%MyProcess%"
TASKLIST | FINDSTR /I "%MyProcess%"
IF ERRORLEVEL 1 (GOTO :StartScripts) ELSE (ECHO "%MyProcess%" est en cours d^'execution)
GOTO :B 

:StartScripts 
::: //-- Put in the full path to the batch scripts to call
::: //-- Be sure the security context this process runs as has access to execute the below called batch scripts
CALL "C:\Path\1.bat"
CALL "C:\Path\2.bat"
CALL "C:\Path\3.bat"
GOTO :B 

(Я предполагаю, что вызываемые пакетные сценарии будут иметь логику для запуска любого процесса, который, как было установлено, НЕ найден работающим в памяти на компьютере, на котором выполняется сценарий abobe, поэтому просто убедитесь, что GOTO EOF - это последнее, что ВСЕ делают. Мне нужно было бы увидеть логику в них, чтобы знать, будет ли это работать нормально или нет, хотя в противном случае.)

ПРИМЕР ВЫЗВАННОГО СКРИПТА (например, 1.bat, 2.bat, 3.bat)

<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<END OF LOGIC>

::: Keep GOTO EOF here to pass control back to the caller
GOTO EOF

ДРУГИЕ ЗАМЕЧАНИЯ

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

  • Логика пакетного сценария с TASKLIST и FINDSTR как я это понимаю, должна работать без синтаксиса [ /NH /FI imagename eq ], как в примере, который вы показали в своем вопросе. Использование FINDSTR вместо FIND как в вашем примере, также хорошо.

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


ДОПОЛНИТЕЛЬНЫЕ РЕСУРСЫ

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .