[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

我想使用批处理检查系统当中的三个服务是否全部都在运行状态, 如果没运行就启动, 等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

我有个现成的,差不多的,你稍微修改一下就可以用了,我是监控它在运行就自动停止。你反过来就好了。
  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

评分人数

    • 5i365: 感谢分享技术 + 1

TOP

回复 4# 5i365


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

1

评分人数

    • 5i365: 乐于助人, 技术牛X技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# 5i365


思路2:
定义一个变量 RunningCount 初始值是0
对于每一个服务用 sc + find 判断状态之后,如果是运行状态,那么 set /a RunningCount+=1
最后判断RunningCount的值是不是3就能知道是否三个服务全都是运行状态
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


    感谢大侠支招, 有时服务不能启动似的, 要再次启动才行

TOP

回复 1# 5i365


思路1:不做任何判断,直接启动服务,反正对于已经启动的服务也没啥影响。
  1. @echo off
  2. net start "ser1"
  3. net start "ser2"
  4. net start "ser3"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

找了段PS的代码, 可以启用服务, 但是如何像批处理一样, 加标签循环检查呢? 搜索了一下, ps居然没有 goto 和 lable 命令

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

startService "ser1" "ser2" "ser3"

TOP

返回列表