如果服务存在条件

Bur*_*urt 10 windows cmd batch-file

你如何检查WIN32服务是否存在,如果存在,是否进行了一些操作?

Joe*_*oey 19

你不能在DOS中这样做,因为DOS不是Windows,甚至没有"服务"的概念.

在Windows批处理文件中,您可以使用该sc命令查找服务:

sc query | findstr SERVICE_NAME
Run Code Online (Sandbox Code Playgroud)

这将枚举所有服务并产生各自的名称.

您可以使用搜索特定服务

sc query | findstr /C:"SERVICE_NAME: myservice"
Run Code Online (Sandbox Code Playgroud)

请记住,此搜索区分大小写.您可以添加/I开关findstr以避免这种情况.


ica*_*bod 12

在我的脑海中,您可以检查特定服务是否正在运行,如bmargulies所述,使用"net"命令,将结果输入"find".以下内容将检查服务是否正在运行,如果是,则停止它.然后你可以启动它而不用担心它是否已经运行:

net start | find "SomeService"
if ERRORLEVEL 1 net stop "SomeService"
net start "SomeService"
Run Code Online (Sandbox Code Playgroud)

如果您正在使用findstr进行搜索,正如其他一些答案所建议的那样,那么您将检查ERRORLEVEL是否等于0(零)...如果是,那么您找到了您正在寻找的字符串:

net start | findstr "SomeService"
if ERRORLEVEL 0 net stop "SomeService"
net start "SomeService"
Run Code Online (Sandbox Code Playgroud)

基本上大多数DOS命令都会设置ERRORLEVEL,允许您检查像find这样的东西是否成功.


hel*_*456 5

只是接受答案的补遗.如果您希望执行其他操作,而不仅仅是重新启动服务,并且正在查看是否已安装该服务.

sc query state= all | findstr /C:"SERVICE_NAME: MyService" 
if ERRORLEVEL 0 (**My Operation**)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,state = all很重要,因为如果服务没有启动,它将被解释为未安装,这是两个单独的事情.