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

[系统相关] 批处理判断服务,在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

求教。

  1. sc query state= all > 1.txt
复制代码
他的意思是这样可以把服务全部列出来
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

你在XP上面打开一个命令行窗口,依次执行下面两个命令,结果发出来我看看
  1. sc query tomcat6
复制代码
  1. echo %errorlevel%
复制代码
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

回复 2# gawk

哦,这样啊。。我看SC的命令注释都没理解。。

TOP

回复 3# gawk
嗯,请稍等。。现在同事在休息。。

TOP

本帖最后由 祈风 于 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
复制代码

TOP

回复 6# 祈风


    不是很了解你的环境,你同事的电脑可以查dhcp不能查tomcat6?
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

本帖最后由 祈风 于 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
复制代码

TOP

回复 8# 祈风


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

sc query tomcat6
echo %errorlevel%

把两个截图发出来就行了,不需要其他任何语言文字上的描述。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

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

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

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

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

TOP

本帖最后由 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",两者可能不同

TOP

回复 10# 祈风


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

我这里没有XP系统无法测试,同时这个思路又让你觉得不爽,那就祝你好运吧。
Talk is cheap. Show me the code.
没事不要瞎扯淡,有能耐就把代码贴出来给我看。

TOP

返回列表