我想要一个批处理文件来检查服务“MyServiceName”是否正在运行。如果服务正在运行,我希望批处理文件禁用它,然后显示一条消息。如果它没有运行,并且被禁用,我希望批处理文件显示一条消息,然后退出。谢谢您的帮助。如何通过批处理文件检查服务是否正在运行,如果服务未运行,请将其停止?
4
A
回答
9
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
要停止服务:
net stop MyServiceName
1
如果试图拿出一个小脚本,它利用了SC
-command,这似乎也尽管一些局限性的(我无法测试它):
@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
)
我不知道这是否给出你想要的行为。好像SC
没有列出被禁用的服务。但是因为如果它被禁用,你不想做任何事情,如果找不到服务,我的代码就会打印一条消息。
但是,您可以将我的代码作为框架/工具箱用于您的目的。
编辑:
鉴于npocmaka的答案,你很可能改变for
-sections喜欢的东西:
sc query %service%| find "RUNNING" >nul 2>&1 && set running=true
1
此脚本采用服务名称作为第一个(也是唯一的)参数,或者您可以将其硬编码到SVC_NAME作业中。 sc命令的输出被丢弃。我不知道你是否真的想看到它。
@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. 如何通过批处理文件检查服务是否正在运行并启动它(如果未运行)?
- 2. 批处理文件检查系统服务是否正在运行
- 3. 批处理程序停止正在运行的服务
- 4. 检查服务是否正在运行?
- 5. 检查服务是否正在运行
- 6. 停止服务,运行批处理文件,然后启动服务
- 7. Selenium 2:如何检查服务器正在运行并停止服务器?
- 8. 如果Windows进程在服务停止时正在运行,如何检查Python?
- 9. 如何在远程服务器上运行批处理文件
- 10. 检查SQL服务器服务是否正在运行
- 11. 停止Windows服务是通过批处理文件
- 12. 如何在Linux上检查服务是否正在运行Mint
- 13. 如何在安装前检查服务是否正在运行?
- 14. 如何检查批处理文件是否在Windows上运行?
- 15. C程序 - 如何检查Web服务是否正在运行
- 16. android如何检查服务是否正在运行
- 17. 如何检查Redis服务器是否正在运行
- 18. 如何检查服务是否正在运行
- 19. 如何检查硒服务器是否正在运行?
- 20. 检查是否有其他批处理文件仍在运行
- 21. 如何检查服务是否停止
- 22. 如何停止运行服务?
- 23. 如何通过批处理脚本检查进程是否正在运行
- 24. Windows服务来运行批处理文件,InstallUtil /我阻止服务启动?
- 25. 如何检查服务器是否运行超过15分钟?
- 26. 停止并通过批处理或cmd文件启动服务?
- 27. .Net运行时错误停止服务;未处理的IOException
- 28. 批处理文件检查是否有多个名称中包含常用词的服务正在运行并启动它们(如果未运行)?
- 29. 试图将批处理文件作为Windows服务运行
- 30. 将批处理文件作为Windows服务运行
'sc query state = all'(等号后的空格是importart)将获得所有服务。 – mojo
好吧,我明白了,thx。然而,当你寻找一个特定的名字时,'SC'无论如何都会返回'STATE = STOPPED',所以你可能会测试''%state%“==”STOPPED“'。 – marsze