我正在尝试在批处理文件中使用通配符来远程停止多个服务,而无需使用全名。如下所示服务*
下面是一些我需要使用的示例命令,但正如您所看到的,我必须明确指定进程的全名,并且不能使用通配符来查找匹配项以运行命令来操作这些进程名称。
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