wmic service where name="Service-Name" get state
покажет вам, работает ли служба или остановлена. Вы можете вернуться к этой команде и использовать ping для паузы.
:running
ping /n 2 0.0.0.0 >NUL
for /f "tokens=2 delims=^=" %%I in ('wmic service where name^="Service-Name" get state /format:list') do (
if #%%I==#Running goto running
)
rem When the script reaches this line, the service status is not "Running."
Или, если вы предпочитаете использовать sc
, чтобы определить состояние службы:
:running
ping /n 2 0.0.0.0 >NUL
for /f "tokens=4" %%I in ('sc query Service-Name ^| find /i "state"') do (
if #%%I==#RUNNING goto running
)
rem When the script reaches this line, the service status is not "Running."
Я не уверен, но возможно, что сервис может сказать «остановился», когда на самом деле это «остановка »или« работает », когда это действительно« начинается ». Если это так, то вам может быть лучше проверить, существует ли процесс в списке процессов. Это также можно сделать с помощью wmic: wmic process where name="appname.exe" get name
или аналогичного.
См. Ответы на http://stackoverflow.com/questions/133883/stop-and-start-a-service-via-batch-or-cmd-file или [Как проверить код выхода последней команды в пакетный файл] [1]. [1]: http://superuser.com/questions/194662/how-to-check-the-exit-code-of-the-last-command-in-batch-file – Mogsdad