Пакетный файл, который проверяет наличие другого процесса пакетного файла

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

tasklist /FI "IMAGENAME eq server_64.exe" 2> nul | find "server_64.exe" > nul
IF ERRORLEVEL == 1 (
echo Server is not running
echo.
) else (
echo Stopping Server ...
echo.
taskkill /F /IM server_64.exe > nul 2>&1
)

Один для запуска и один для остановки серверов. Ну, это прекрасно работает, но когда дело доходит до пакетных файлов, у меня это не сработает... У меня есть один сервер, который работает на phyton, поэтому запустите его через пакетный файл. Мой вопрос: есть ли способ как-то получить статус процесса пакетного файла и остановить его, как это работает для exe? Надеюсь, я объяснил это достаточно хорошо. Спасибо заранее! :)


person Buddy Sievers    schedule 24.06.2016    source источник
comment
IF %ERRORLEVEL% == 1 ( или IF ERRORLEVEL 1 (, хотя эти IF не дают одинаковых результатов, см. ss64.com/nt/if.html и ss64.com/nt/find.html   -  person JosefZ    schedule 24.06.2016
comment
@JosefZ, предпочтительно IF %ERRORLEVEL% EQU 1 (оператор == вызывает сравнение строк, EQU выполняет числовое сравнение, когда оба выражения являются чисто числовыми, а IF ERRORLEVEL 1 фактически означает IF ERRORLEVEL >= 1, но некоторые команды также могут использовать отрицательные значения ERRORLEVEL)...   -  person aschipfl    schedule 24.06.2016
comment
скрипт работает для exe-файлов, как и должен, но не для пакетных файлов.   -  person Buddy Sievers    schedule 25.06.2016


Ответы (2)


Вы можете попробовать это с пакетным файлом следующим образом:

@echo off 
set "Process=server_64.exe"
Title Checking for status of this process ===^> "%Process%"
tasklist /nh /fi "imagename eq %Process%" 2>nul |find /i "%Process%" >nul
IF '%ERRORLEVEL%' EQU '1' (
    Color 0B
    echo.
    echo "%Process%" is not running
) else (
    Color 0C
    echo.
    echo Stopping "%Process%" ...
    taskkill /F /IM "%Process%" > nul 2>&1
)
pause
person Hackoo    schedule 24.06.2016
comment
вы меня неправильно поняли, может быть, я недостаточно хорошо объяснил. мне нужно проверить список задач на наличие пакетного файла, который работает, а не исполняемый файл, который работает хорошо. у меня есть пакетный файл, который запускает скрипт phyton, и я хочу проверить cmd, который фактически запускает скрипт. когда я пытаюсь использовать xyz.bat там, где я использую server_64.exe, это не сработает. - person Buddy Sievers; 25.06.2016
comment
Я даже пытался скомпилировать пакет в exe-файл, чтобы найти его в списке задач, но он почему-то не работает. - person Buddy Sievers; 25.06.2016
comment
список задач /FI WINDOWTITLE eq Администратор: Broker2›NUL | find /I /N cmd.exe2>NUL не будет работать, я расстраиваюсь, потому что Google мне вообще не поможет xD, и не имеет значения, использую ли я Администратора: в качестве префикса или нет, оба просто выдали мне уровень ошибки 1, да... - person Buddy Sievers; 25.06.2016

О боже, я нашел решение, это был зверь...

tasklist /fi "imagename eq cmd.exe" /v /fo table /nh | find /i "Broker" 2>nul

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

tasklist /fi "imagename eq cmd.exe" /v /fo table /nh 2>nul | find /i "Broker" 2>nul

так что с этим не так? ^

person Buddy Sievers    schedule 25.06.2016
comment
да мне очень жаль! это просто ›nul вместо 0f 2›nul - person Buddy Sievers; 25.06.2016