我是脚本世界的新手,正致力于远程停止和启动一系列Windows服务。
我遇到的问题......我有一系列服务,其名称一直到最后都需要按顺序停止。
示例:
APPNAME_Service_1111
APPNAME_Service_1111_A
APPNAME_Service_2222
APPNAME_Service_2222_A
我想知道如何开始/停止服务APPNAME_Service_1111
和APPNAME_Service_2222
然后开始/停止APPNAME_Service_1111_A
和APPNAME_Service_2222_A
秒。
所以像APPNAME_Service_%%%%_A
这样的服务会做第二个/最后一个
我使用此脚本作为基础。
@echo off
:choice
set /P c=This will stop X Services Are you sure you want to continue[Y/N]?
if /I "%c%" EQU "Y" goto :stopservice1
if /I "%c%" EQU "N" goto :end
goto :choice
echo "stopping services now"
:stopservice1
wmic /node:@list.txt service where "name like '%%_service_%%XXX'" call stopservice
pause
exit
:end
pause
exit
非常感谢任何帮助。
答案 0 :(得分:0)
让我们使用sc query
中正在运行的服务列表:
SERVICE_NAME: TeamViewer
DISPLAY_NAME: TeamViewer 10
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
然后通过服务名称和特殊标记findstr
传递给SERVICE_NAME:
,以确保在第一次传递中提取正确的行和/v /e
命令行参数以排除第二遍中的后缀_A
和/e
只需要它。
代码:
for %%a in ("/v /e" "/e") do (
for /f "tokens=2" %%b in ('
sc query ^| findstr "_Service_" ^| findstr "SERVICE_NAME:" ^| findstr %%~a "_A"
') do sc stop %%b
)