How to check if a service is running through a batch file and stop it if it is not running?

I want the batch file to check if the "MyServiceName" service is working. If the service is running, I want the batch file to disable it and then display a message. If it is not running and disabled, I want the batch file to display a message and then exit. Thanks for the help.

+4
source share
3 answers
sc query MyServiceName| find "RUNNING" >nul 2>&1 && echo service is runnung sc query MyServiceName| find "RUNNING" >nul 2>&1 || echo service is not runnung 

To stop the service:

 net stop MyServiceName 
+9
source

If you try to find a little script that uses the SC command, which seems to have some limitations (and I could not test it):

 @echo off setlocal enabledelayedexpansion :: Change this to your service name set service=MyServiceName :: Get state of service ("RUNNING"?) for /f "tokens=1,3 delims=: " %%a in ('sc query %service%') do ( if "%%a"=="STATE" set state=%%b ) :: Get start type of service ("AUTO_START" or "DEMAND_START") for /f "tokens=1,3 delims=: " %%a in ('sc qc %service%') do ( if "%%a"=="START_TYPE" set start=%%b ) :: If running: stop, disable and print message if "%state%"=="RUNNING" ( sc stop %service% sc config %service% start= disabled echo Service "%service%" was stopped and disabled. exit /b ) :: If not running and start-type is manual, print message if "%start%"=="DEMAND_START" ( echo Start type of service %service% is manual. exit /b ) :: If start=="" assume Service was not found, ergo is disabled(?) if "%state%"=="" ( echo Service "%service%" could not be found, it might be disabled. exit /b ) 

I do not know if this gives the behavior you wanted. SC does not seem to list the services that are disabled. But since you do not want to do anything if it is disabled, my code simply prints a message if the service is not found.

However, you can, hopefully, use my code as a framework / toolkit for your purposes.

EDIT:

Given npocmaka's answer, you can probably change the for sections to something like:

 sc query %service%| find "RUNNING" >nul 2>&1 && set running=true 
+1
source

This script assigns the service name as the first (and only) parameter, or you can rigidly bind it to the destination of SVC_NAME. The output of sc commands is discarded. I don’t know if you want to see it or not.

 @ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET SVC_NAME=MyServiceName IF NOT "%~1"=="" SET "SVC_NAME=%~1" SET SVC_STARTUP= FOR /F "skip=1" %%s IN ('wmic path Win32_Service where Name^="%SVC_NAME%" get StartMode') DO ( IF "!SVC_STARTUP!"=="" SET "SVC_STARTUP=%%~s" ) CALL :"%SVC_STARTUP%" "%SVC_NAME%" CALL :StopService "%SVC_NAME%" GOTO :EOF :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :"Boot" :"System" :"Auto" :"Manual" @ECHO Disabling service '%~1'. sc.exe config "%~1" start= disabled > NUL IF NOT ERRORLEVEL 1 @ECHO Service '%~1' disabled. EXIT /B :"Disabled" @ECHO Service '%~1' already disabled. EXIT /B :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :StopService SETLOCAL SET SVC_STATE= FOR /F "skip=1" %%s IN ('wmic path Win32_Service where Name^="%~1" get State') DO ( IF "!SVC_STATE!"=="" SET "SVC_STATE=%%~s" ) CALL :"%SVC_STATE%" "%~1" EXIT /B :"Running" :"Start Pending" :"Continue Pending" :"Pause Pending" :"Paused" :"Unknown" @ECHO Stopping service '%~1'. sc.exe stop "%~1" > NUL IF NOT ERRORLEVEL 1 @ECHO Service '%~1' stopped. EXIT /B :"Stop Pending" :"Stopped" @ECHO Service '%~1' is already stopping/stopped. EXIT /B 
+1
source

Source: https://habr.com/ru/post/1488088/


All Articles