2010-06-09 153 views
2

我正在写一个windows批处理脚本来卸载一些软件。但是,在卸载程序完成后,需要等待重新启动服务,然后才能继续下一次卸载。如何在继续批处理脚本之前等待服务/进程启动?

我可以让脚本等待卸载程序使用完成日常: -

for /f "usebackq" %%M in ('tasklist /nh /fi "imagename eq %process_1%"') do if not %%M==%ignore_result% goto 1

但我不能为我的生活弄清楚如何让脚本然后等待在继续执行脚本并运行更多卸载之前启动的服务。

我愿意接受任何建议。

+0

如果你可以找出读取批处理文件中的输出的方法,那么你可以使用'sc query '来获得服务的状态。 – 2010-06-09 10:34:47

+0

它是否必须是批处理文件?似乎VBScript会更容易。 – Luke 2010-06-10 01:21:53

+0

我的编程技巧很少,所以我使用一种非常高级的语言进行编程。但是,我打开这样做的另一种方式,因为我总是可以从批处理文件中调用VBScript。 – 2010-06-11 13:25:29

回答

0

确定从评论我已经使用下面的脚本来解决问题。我希望不要使用一个中间文件,但如果需要,必须....

@echo off
if exist service.txt del service.txt
set process=setup.exe
set ignore_result=INFO:
:1
for /f "usebackq" %%M in ('tasklist /nh /fi "imagename eq %process%"') do if not %%M==%ignore_result% goto 1
:2
sc query AcquisitionService>service.txt
find "RUNNING"<service.txt>nul
if errorlevel 1 goto 2
:3
echo.
echo Stuff finished.......

感谢您的想法。

2

这个怎么样避免使用中间文件

FOR /F "usebackq tokens=1,4" %%A IN (`sc query AcquisitionService`) DO (
    IF %%A==STATE SET serviceStatus=%%B 
) 
0

通过海报作品提供的anwser但它使用的临时文件。 我找到了一种避免使用管道分隔符的方法。

此代码将启动,然后该服务等待,直到它已经开始:

sc start ServiceName 
:1 
sc query ServiceName>NUL | find "RUNNING">NUL 
if errorlevel 1 goto 1 
(...) 

的rediection(> NUL)是可选的,或者至少他们不会让我的情况不同。

+0

它对我来说不适用于(> NUL)重定向,当我移除它时效果很好。 – Bartosz 2017-11-09 09:56:44

相关问题