找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 22117|回复: 6

[系统相关] 批处理如何循环检查多个服务是否运行?

[复制链接]
发表于 2022-2-16 10:19:28 | 显示全部楼层 |阅读模式
我想使用批处理检查系统当中的三个服务是否全部都在运行状态, 如果没运行就启动, 等5秒后, 再检查运行状态, 直到全部运行
自己写了部分代码, 遇到了点问题, 求高手能支招完善一下, 非常感谢!!
问题1: 红字部分我改成ser4 也会回显  ser1服务正在运行
问题2: 现在是在检查一个服务, 如何检查三个服务同时运行, 如果没运行就启动?

@echo off
set ser1="ser1"
set ser2="ser2"
set ser3="ser3"

:label1
sc query %ser1%| find "RUNNING" >nul 2>&1 && set running=true

if defined running (echo ser1服务正在运行 ) else (
        echo net start %ser1%
        choice /t 5 /d y /n >nul
        goto :label1
        )

pause
 楼主| 发表于 2022-2-16 10:30:41 | 显示全部楼层
找了段PS的代码, 可以启用服务, 但是如何像批处理一样, 加标签循环检查呢? 搜索了一下, ps居然没有 goto 和 lable 命令

Function startService()
{
        $args | Foreach {
                Get-Service -Name $_ |
                where Status -NE Running |
                Start-Service
        }
}

startService "ser1" "ser2" "ser3"
发表于 2022-2-16 10:30:45 | 显示全部楼层
回复 1# 5i365


思路1:不做任何判断,直接启动服务,反正对于已经启动的服务也没啥影响。
  1. @echo off
  2. net start "ser1"
  3. net start "ser2"
  4. net start "ser3"
复制代码
 楼主| 发表于 2022-2-16 10:32:21 | 显示全部楼层
回复 3# Batcher


    感谢大侠支招, 有时服务不能启动似的, 要再次启动才行
发表于 2022-2-16 10:35:46 | 显示全部楼层
回复 1# 5i365


思路2:
定义一个变量 RunningCount 初始值是0
对于每一个服务用 sc + find 判断状态之后,如果是运行状态,那么 set /a RunningCount+=1
最后判断RunningCount的值是不是3就能知道是否三个服务全都是运行状态
发表于 2022-2-16 10:46:33 | 显示全部楼层
回复 4# 5i365


这种情况也不需要自己用循环来再次启动,可以在 services.msc 里面把服务的恢复设置从默认的“不操作”改为“重新启动服务”

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 乐于助人, 技术牛X

查看全部评分

发表于 2022-2-16 14:58:01 | 显示全部楼层
我有个现成的,差不多的,你稍微修改一下就可以用了,我是监控它在运行就自动停止。你反过来就好了。
  1. @echo off&setlocal enabledelayedexpansion
  2. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
  3. :start
  4. cls
  5. for /f "skip=3 tokens=4" %%i in ('sc query XLServicePlatform') do set "zt=%%i" &goto :next
  6. :next
  7. if /i "%zt%"=="RUNNING" (sc stop XLServicePlatform )
  8. echo.
  9. if /i "%zt%"=="STOPPED" (echo XLServicePlatform 服务目前是停止状态,没有运行)

  10. for /f "skip=3 tokens=4" %%i in ('sc query TbtHostControllerService') do set "zt=%%i" &goto :next
  11. :next
  12. if /i "%zt%"=="RUNNING" (sc stop TbtHostControllerService )
  13. echo.
  14. if /i "%zt%"=="STOPPED" (echo TbtHostControllerService 服务目前是停止状态,没有运行)

  15. for /f "skip=3 tokens=4" %%i in ('sc query TbtP2pShortcutService') do set "zt=%%i" &goto :next
  16. :next
  17. if /i "%zt%"=="RUNNING" (sc stop TbtP2pShortcutService )
  18. echo.
  19. if /i "%zt%"=="STOPPED" (echo TbtP2pShortcutService 服务目前是停止状态,没有运行)
  20. echo.
  21. echo.
  22. echo 倒计时30秒后,将重新检测!
  23. echo.
  24. TIMEOUT /T 30 /NOBREAK
  25. goto start
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 感谢分享

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 11:23 , Processed in 0.020232 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表