How to check if a service is running via batch file and start it, if it is not running?
I want to write a batch file that performs the following operations:
- Check if a service is running
- If is it running, quit the batch
- If it is not running, start the service
The code samples I googled so far turned out not to be working, so I decided not to post them.
Starting a service is done by:
net start "SERVICENAME"
- How can I check if a service is running, and how to make an if statement in a batchfile?
- I'm a bit confused. What is the argument I have to pass onto the net start? The service name or its display name?
To check a service's state, use
sc query <SERVICE_NAME>. For if blocks in batch files, check the documentation.
The following code will check the status of the service
MyServiceName and start it if it is not running (the if block will be executed if the service is not running):
for /F "tokens=3 delims=: " %%H in ('sc query "MyServiceName" ^| findstr " STATE"') do ( if /I "%%H" NEQ "RUNNING" ( REM Put your code you want to execute here REM For example, the following line net start "MyServiceName" ) )
Explanation of what it does:
- Queries the properties of the service.
- Looks for the line containing the text "STATE"
- Tokenizes that line, and pulls out the 3rd token, which is the one containing the state of the service.
- Tests the resulting state against the string "RUNNING"
As for your second question, the argument you will want to pass to
net start is the service name, not the display name.
Read more... Read less...
To toggle a service use the following;
NET START "Distributed Transaction Coordinator" ||NET STOP "Distributed Transaction Coordinator"
You can use the following command to see if a service is running or not:
sc query [ServiceName] | findstr /i "STATE"
When I run it for my NOD32 Antivirus, I get:
STATE : 4 RUNNING
If it was stopped, I would get:
STATE : 1 STOPPED
You can use this in a variable to then determine whether you use NET START or not.
The service name should be the service name, not the display name.
That should do it:
FOR %%a IN (%Svcs%) DO (SC query %%a | FIND /i "RUNNING" IF ERRORLEVEL 1 SC start %%a)
Language independent version.
@Echo Off Set ServiceName=Jenkins SC queryex "%ServiceName%"|Find "STATE"|Find /v "RUNNING">Nul&&( echo %ServiceName% not running echo Start %ServiceName% Net start "%ServiceName%">nul||( Echo "%ServiceName%" wont start exit /b 1 ) echo "%ServiceName%" started exit /b 0 )||( echo "%ServiceName%" working exit /b 0 )
I just found this thread and wanted to add to the discussion if the person doesn't want to use a batch file to restart services. In Windows there is an option if you go to Services, service properties, then recovery. Here you can set parameters for the service. Like to restart the service if the service stops. Also, you can even have a second fail attempt do something different as in restart the computer.