Web services 批处理文件,以检查名称中有一个公用词的多个服务是否正在运行,并在未运行时启动它们?

Web services 批处理文件,以检查名称中有一个公用词的多个服务是否正在运行,并在未运行时启动它们?,web-services,wcf,batch-file,service,Web Services,Wcf,Batch File,Service,我想通过批处理文件执行以下操作: 操作-->检查名称中包含公共单词的多个服务是否正在运行,如以下条件: 1) IF services name contain word "Demo Service" 2) IF services name contain word "Demo Mobile Service" 3) IF services name contain word "Demo StTime Service" 操作-->如果所有服务都在运行,请退出批处

我想通过批处理文件执行以下操作:

操作-->检查名称中包含公共单词的多个服务是否正在运行,如以下条件:

      1) IF services name contain word "Demo Service"
      2) IF services name contain word "Demo Mobile Service"
      3) IF services name contain word "Demo StTime Service"
操作-->如果所有服务都在运行,请退出批处理

操作-->如果一个或多个服务未运行,请逐个启动服务

我有一个服务器,上面有大约50个服务,服务的示例名称:

001122演示服务

001122演示移动服务

001252演示服务

001252演示移动服务

001252演示时间服务

由于某些原因(资源就是其中之一),很少有服务会在任意时间停止,所以我需要这个脚本工作,直到我获得更多资源

我找到了一些零碎的东西,并试图把它们编译成如下的东西

@ECHO off
SETLOCAL EnableDelayedExpansion

set "SERVICE_NAME=Demo Service"
echo %SERVICE_NAME%
FOR /L %%G IN (1,1,100) DO (
set "SERVICE_NAME=%SERVICE_NAME%%%G"
echo Starting "!SERVICE_NAME!"
net start "!SERVICE_NAME!"
)

set "M_SERVICE_NAME=Demo Mobile Service"
echo %M_SERVICE_NAME%
FOR /L %%G IN (1,1,100) DO (
set "M_SERVICE_NAME=%M_SERVICE_NAME%%%G"
echo Starting "!M_SERVICE_NAME!"
net start "!M_SERVICE_NAME!"
)

set "ST_SERVICE_NAME=Demo StTime Service"
echo %ST_SERVICE_NAME%
FOR /L %%G IN (1,1,100) DO (
set "ST_SERVICE_NAME=%ST_SERVICE_NAME%%%G"
echo Starting "!ST_SERVICE_NAME!"
net start "!ST_SERVICE_NAME!"
)
第一个问题是,由于for循环,它试图查找100个服务,第二个问题是服务名称无效,因此我不确定如何修复lixe条件。
有人能帮我处理这个批处理文件吗?

让我看看。首先,列出所有具有
sc query state=all
的服务,这将给出此类项目的长列表:

SERVICE_NAME: w32time  
DISPLAY_NAME: Windows Time  
        TYPE               : 20  WIN32_SHARE_PROCESS  
        STATE              : 4  RUNNING  
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)  
        WIN32_EXIT_CODE    : 0  (0x0)  
        SERVICE_EXIT_CODE  : 0  (0x0)  
        CHECKPOINT         : 0x0  
        WAIT_HINT          : 0x0  
        PID                : 1064  
        FLAGS              :
现在通过
显示\u名称:
演示和
服务来过滤列表:

sc query state= all | findstr /r /c:"DISPLAY_NAME: .*Demo .*Service"
输出将是:

显示名称:001122演示服务
显示名称:001122演示移动服务
显示名称:001252演示服务
显示名称:001252演示移动服务
显示名称:001252演示时间服务

现在获取第一个单词后的文本并启动服务。
最后的代码是:

@echo off
for /f "tokens=1*" %%a in ('
    sc query state^= all ^| findstr /r /c:"DISPLAY_NAME: .*Demo .*Service"
') do net start "%%b"

要隐藏消息,请使用
net start“%%b”2>nul

让我们看看。首先,列出所有具有
sc query state=all
的服务,这将给出此类项目的长列表:

SERVICE_NAME: w32time  
DISPLAY_NAME: Windows Time  
        TYPE               : 20  WIN32_SHARE_PROCESS  
        STATE              : 4  RUNNING  
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)  
        WIN32_EXIT_CODE    : 0  (0x0)  
        SERVICE_EXIT_CODE  : 0  (0x0)  
        CHECKPOINT         : 0x0  
        WAIT_HINT          : 0x0  
        PID                : 1064  
        FLAGS              :
现在通过
显示\u名称:
演示和
服务来过滤列表:

sc query state= all | findstr /r /c:"DISPLAY_NAME: .*Demo .*Service"
输出将是:

显示名称:001122演示服务
显示名称:001122演示移动服务
显示名称:001252演示服务
显示名称:001252演示移动服务
显示名称:001252演示时间服务

现在获取第一个单词后的文本并启动服务。
最后的代码是:

@echo off
for /f "tokens=1*" %%a in ('
    sc query state^= all ^| findstr /r /c:"DISPLAY_NAME: .*Demo .*Service"
') do net start "%%b"

要隐藏消息,请首先使用
net start“%%b”2>nul

,您应该注释掉
@echo off
--许多问题都可以很容易地解决…首先,您应该注释掉
@echo off
--许多问题都可以很容易地解决…我尝试使用sc query state=all进行查询| findstr/r/c:“DISPLAY_NAME:.*Demo.*Service”-它工作正常,列出了所有服务。但是,当我用您提供的代码创建一个批处理文件时,它没有做任何事情,我在文件末尾添加了暂停,它没有显示任何错误或任何东西。我是否缺少任何东西?我尝试使用sc query state=all | findstr/r/c进行查询:“DISPLAY_NAME:*Demo.*Service”“---它运行良好,列出了所有服务。但是,当我使用您提供的代码创建一个批处理文件时,它什么也不做,我在它的末尾添加了pause,它没有显示任何错误或任何东西。我遗漏了什么吗?