2010-06-09 85 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

相關問題