如何在批处理文件中停止没有全名的服务?

如何在批处理文件中停止没有全名的服务?

我正在尝试在批处理文件中使用通配符来远程停止多个服务,而无需使用全名。如下所示服务*

下面是一些我需要使用的示例命令,但正如您所看到的,我必须明确指定进程的全名,并且不能使用通配符来查找匹配项以运行命令来操作这些进程名称。

taskkill /s server1 /im service2018.EXE
sc.exe \\server1 start service1

taskkill /s server2 /im service2018.exe
sc.exe \\server2 start service2

答案1

你可以做的是使用任务列表使用/FO LIST选项,然后将其传递给一对寻找命令并使用/I开关根据需要搜索通配符关键字。

你可以通过为/F循环使用"DELIMS=: TOKENS=2"以及变量子串技巧是解析空格以返回匹配的进程名称,然后终止等等。

批处理脚本

SET SrvName=Server1
SET Wildcard=service

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "DELIMS=: TOKENS=2" %%A IN ('TASKLIST /S %SrvName% /FO LIST ^| FIND /I "Image name:" ^| FIND /I "%Wildcard%"') DO (
    SET var=%%~A
    SET var=!var: =!
    ECHO !var!
    taskkill /s %SrvName% /f /im !var!
)

更多资源

答案2

我之所以要终止该服务,是因为服务名称是一致的,但要启动该服务,多个服务器上的全名永远不会相同。我认为这个命令适合我在没有全名的情况下在远程计算机上启动服务:

WMIC/node:server1 服务,其中“名称类似于‘service%%’”调用 startservice

相关内容