我想编写一个执行以下操作的批处理文件:
- 检查服务是否正在运行
- 如果正在运行,则退出批处理
- 如果没有运行,启动服务
到目前为止,我在 Google 上搜索过的代码示例结果无法正常工作,因此我决定不发布它们。
启动服务是通过以下方式完成的:
net start "SERVICENAME"
- 如何检查服务是否正在运行,以及如何在批处理文件中创建 if 语句?
- 我有点困惑。我必须传递给网络启动的论点是什么?服务名称或其显示名称?
最佳答案
要检查服务的状态,请使用 sc query <SERVICE_NAME>
.对于批处理文件中的 if block ,check the documentation .
以下代码将检查服务状态 MyServiceName
并在它未运行时启动它(如果服务未运行,将执行 if block ):
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"
)
)
它做什么的解释:
- 查询服务的属性。
- 查找包含文本“STATE”的行
- 对该行进行标记,并取出第三个标记,即包含服务状态的标记。
- 根据字符串“RUNNING”测试结果状态
至于你的第二个问题,你想传递给 net start
的参数是服务名称,不是显示名称。
关于windows - 如何通过批处理文件检查服务是否正在运行并启动它,如果它没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325081/