Board logo

标题: [系统相关] 请问如何用批处理判断一个服务的状态? [打印本页]

作者: hbrs    时间: 2008-4-26 21:07     标题: 请问如何用批处理判断一个服务的状态?

我的计算机上的默认的只开了很少的服务

有些服务不常用,所以就没有开,

我现在就是想做一个批处理 达到这样的效果:

我运行这个批处理,如果查到此服务是停止的就开启此服务;

如果这个批处理检测到这个服务是开启的就停止此服务

谢谢各位了
作者: namejm    时间: 2008-4-27 08:56

  查询服务状态用 sc query ,开启服务用 sc start ,停止服务用 sc stop ;问题的关键有两点:一是需要知道这些服务的具体名称;二是需要提取 sc query 运行后的有效数据。第一点需要楼主自行解决,第二点可以通过 for 来提取 sc query 运行后 state 所在行的信息。更详细的内容,请在命令行窗口中通过 sc /? 查询,或者在 开始--运行 中运行
hh ntcmds.chm::ntcmds.htm,然后,在打开的帮助文件中找到 sc  的帮助信息。
作者: xiaoxx    时间: 2008-4-27 10:02

hoho这个有用。
我机器上的sqlserver2k5过期了,不能自动启动。需要用批处理把日期改到4.1号之前,启动服务然后再改回。
原来不知道这个指令,只好弄个cmd始终挂在那里。现在就方便多了。
代码如下:

@echo off
set savedata=%date%
echo %savedata%>data.txt
set p=2008-04-01
echo %p%|date
sc start MSSQLSERVER&for /f %%i in (data.txt) do (echo %%i|date)

oh yeah感觉很爽.
作者: namejm    时间: 2008-4-27 10:26

  看了资料马上就能写出批处理代码来,不错不错^_^

  帮你精简一下:
  1. @echo off
  2. echo %date%>data.txt
  3. echo 2008-04-01|date
  4. sc start MSSQLSERVER&&for /f %%i in (data.txt) do (echo %%i|date)
复制代码

作者: hbrs    时间: 2008-4-27 11:00

原帖由 namejm 于 2008-4-27 08:56 发表
  查询服务状态用 sc query ,开启服务用 sc start ,停止服务用 sc stop ;问题的关键有两点:一是需要知道这些服务的具体名称;二是需要提取 sc query 运行后的有效数据。第一点需要楼主自行解决,第二点可以通过 ...


谢谢你的回答,可是我不会通过for来获得state的数据

假如我的服务是messenger,您能帮我写个这样的代码吗?
作者: namejm    时间: 2008-4-27 11:19

  代码如下:
  1. @echo off
  2. for /f "tokens=4" %%i in ('sc query messenger^|findstr /i "state.*:"') do (
  3.     if /i "%%i"=="stopped" (
  4.         sc start messenger
  5.     ) else sc stop messenger
  6. )
  7. pause
复制代码
  注意查看是否有出错信息。在我的电脑上没有成功开启,估计是精简版的原因。
作者: youxi01    时间: 2008-4-27 11:21

还有一点建议:
sc start未必能够启动停止的服务(因为有些服务是禁止自动启动的,这个时候可能先要用到sc config...
作者: wjta    时间: 2008-4-27 20:45

我试着写下去....




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2