Board logo

标题: [系统相关] 批处理判断服务,在xp与win7/win8下的问题 [打印本页]

作者: 祈风    时间: 2015-6-16 12:55     标题: 批处理判断服务,在xp与win7/win8下的问题

通过百度搜索到的原帖
http://www.bathome.net/thread-29760-1-1.html

其中3楼的答案
“sc query tomcat6 >nul && echo yes || echo no
枚举所有的加上“state= all” ”

1.这位哥们的“枚举所有的加上“state= all””请问如何理解

2.“sc query tomcat6 >nul && echo yes || echo no”这条语句在win7下可以正确执行,但是在xp下只会输出第一个echo

求教。
作者: gawk    时间: 2015-6-16 13:07

  1. sc query state= all > 1.txt
复制代码
他的意思是这样可以把服务全部列出来
作者: gawk    时间: 2015-6-16 13:09

你在XP上面打开一个命令行窗口,依次执行下面两个命令,结果发出来我看看
  1. sc query tomcat6
复制代码
  1. echo %errorlevel%
复制代码

作者: 祈风    时间: 2015-6-16 13:42

回复 2# gawk

哦,这样啊。。我看SC的命令注释都没理解。。
作者: 祈风    时间: 2015-6-16 13:43

回复 3# gawk
嗯,请稍等。。现在同事在休息。。
作者: 祈风    时间: 2015-6-16 14:12

本帖最后由 祈风 于 2015-6-16 14:14 编辑

回复 3# gawk
  1. >sc query Dhcp
  2.     SERVICE_NAME: Dhcp
  3.         TYPE               : 20  WIN32_SHARE_PROCESS
  4.         STATE              : 4  RUNNING
  5.                                 (STOPPABLE,NOT_PAUSABLE,ACCEPTS_SHUTDOWN)
  6.         WIN32_EXIT_CODE    : 0  (0x0)
  7.         SERVICE_EXIT_CODE  : 0  (0x0)
  8.         CHECKPOINT         : 0x0
  9.         WAIT_HINT          : 0x0
复制代码
tomcat6因为同事的笔记本,我没试。我觉得 sc query 应该是正常的

然后:
  1. >echo %errorlevel%
  2. 0
复制代码

作者: gawk    时间: 2015-6-16 14:44

回复 6# 祈风


    不是很了解你的环境,你同事的电脑可以查dhcp不能查tomcat6?
作者: 祈风    时间: 2015-6-16 14:55

本帖最后由 祈风 于 2015-6-16 14:57 编辑

回复 7# gawk

不是,我同事的电脑没有安装tomcat6服务,这里的<tomcat6>只是服务名示例。
单个的SC query是正常的,只要能查到都是显示serviceName
但是这条语句在XP中永远是第一个ECHO
  1. >sc query tomcat6 >nul && echo yes || echo no
  2. yes
  3. >sc query tomcat6 >nul && echo no || echo yes
  4. no
复制代码

作者: gawk    时间: 2015-6-16 20:08

回复 8# 祈风


鉴于你没能理解3楼的意思,我重新表达一下:
1、找一台没有安装 tomcat6 的XP,打开一个CMD窗口,依次执行下面两个命令,截图
2、找一台已经安装 tomcat6 的XP,打开一个CMD窗口,依次执行下面两个命令,截图

sc query tomcat6
echo %errorlevel%

把两个截图发出来就行了,不需要其他任何语言文字上的描述。
作者: 祈风    时间: 2015-6-29 16:44

本帖最后由 祈风 于 2015-6-29 16:45 编辑

回复 9# gawk
呵呵哒。。同样的语句,如果说“ && || ” 的 true/false 顺序,在xp与win7下不同,那bat还得先判断系统版本?

不是说不按照你的思路走就是错的。

个人觉得,对于语句的疑问,已经解释地够明了了。不是一定要<tomcat6>这个服务名,而是 sc query [serviceName] && || 这个判断在xp下有问题。寻求解决或者替代的方法。
作者: flyinnet9    时间: 2015-6-29 17:38

本帖最后由 flyinnet9 于 2015-6-29 17:43 编辑

“sc query tomcat6 >nul && echo yes || echo no”这条语句在服务没有安装的情况下是有效的。但是,服务已经安装而没有运行时是不适用这条语句的

服务已安装判断是否运行:“sc query |find "tomcat6" >nul && echo yes || echo no”
另外,确认tomcat6是服务名(servicename),而不是显示名(displayname),可以用语句测试一下 "sc getdisplayname tomcat6",两者可能不同
作者: gawk    时间: 2015-6-29 21:41

回复 10# 祈风


9楼的目的不是让你按照我的思路走,而是要看看XP下sc query之后的%errorlevel%值分别是什么。
这样可以进一步判断是否可以用%errorlevel%来代替&& ||,换句话说就是为了寻找解决或替代方案。
如果sc query的%errorlevel%结果在XP和Win7是一致的,那么,不需要在代码里面判断系统类型。

我这里没有XP系统无法测试,同时这个思路又让你觉得不爽,那就祝你好运吧。




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