2015-10-19 34 views
1

我想執行通過批處理文件執行如下操作:批處理文件檢查是否有多個名稱中包含常用詞的服務正在運行並啓動它們(如果未運行)?

操作 - >檢查是否具有在他們共同的詞他們的名字多種服務正在運行與否,如下列條件的:

 1) IF services name contain word "Demo Service" 
     2) IF services name contain word "Demo Mobile Service" 
     3) IF services name contain word "Demo StTime Service" 

操作 - >如果所有服務正在運行,請退出批處理!

操作 - >如果一個或多個服務沒有運行,啓動服務逐一

我有一臺服務器上他們約50個服務,該服務的樣品名稱:

001122演示服務

001122演示移動服務

001252演示服務

001252演示移動服務

001252演示StTime服務

由於種種原因(資源是其中之一)幾個服務停止在任何隨機的時間,所以我需要這個腳本工作,直到我得到更多的資源。

我發現了點點滴滴,試圖編譯它們,如下所示。

@ECHO off 
SETLOCAL EnableDelayedExpansion 

set "SERVICE_NAME=Demo Service" 
echo %SERVICE_NAME% 
FOR /L %%G IN (1,1,100) DO (
set "SERVICE_NAME=%SERVICE_NAME%%%G" 
echo Starting "!SERVICE_NAME!" 
net start "!SERVICE_NAME!" 
) 

set "M_SERVICE_NAME=Demo Mobile Service" 
echo %M_SERVICE_NAME% 
FOR /L %%G IN (1,1,100) DO (
set "M_SERVICE_NAME=%M_SERVICE_NAME%%%G" 
echo Starting "!M_SERVICE_NAME!" 
net start "!M_SERVICE_NAME!" 
) 

set "ST_SERVICE_NAME=Demo StTime Service" 
echo %ST_SERVICE_NAME% 
FOR /L %%G IN (1,1,100) DO (
set "ST_SERVICE_NAME=%ST_SERVICE_NAME%%%G" 
echo Starting "!ST_SERVICE_NAME!" 
net start "!ST_SERVICE_NAME!" 
) 

1日的問題,它會嘗試去尋找,因爲FOR循環100個服務,第二它說無效的服務名稱,所以我不知道如何解決lixe標準。 可以肯定有人請幫助我這個批處理文件?

+0

首先,你應該註釋'@echo off' - 很多問題都可以很容易地解決然後... – aschipfl

回答

0

讓我們來看看。首先,列出與sc query state= all所有服務,這將給這些項目的一個長長的清單:

SERVICE_NAME: w32time 
DISPLAY_NAME: Windows Time 
     TYPE    : 20 WIN32_SHARE_PROCESS 
     STATE    : 4 RUNNING 
           (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN) 
     WIN32_EXIT_CODE : 0 (0x0) 
     SERVICE_EXIT_CODE : 0 (0x0) 
     CHECKPOINT   : 0x0 
     WAIT_HINT   : 0x0 
     PID    : 1064 
     FLAGS    : 

現在,通過DISPLAY_NAME:DemoService過濾列表:

sc query state= all | findstr /r /c:"DISPLAY_NAME: .*Demo .*Service" 

輸出將是:

DISPLAY_NAME:001122演示服務
DISPLAY_NAME:001122 Demo Mobile Servi CE
DISPLAY_NAME:001252演示服務
DISPLAY_NAME:001252演示移動服務
DISPLAY_NAME:001252演示StTime服務

現在得到的第一個單詞之後的文本,並啓動服務。
最後的代碼是:

@echo off 
for /f "tokens=1*" %%a in (' 
    sc query state^= all ^| findstr /r /c:"DISPLAY_NAME: .*Demo .*Service" 
') do net start "%%b" 

要隱藏消息使用net start "%%b" 2>nul

+0

我試圖用sc query查詢state = all | findstr/r/c:「DISPLAY_NAME:。* Demo。* Service」---它運行良好,列出了所有服務。 但是,當我用你提供的代碼創建了一個批處理文件時,它並沒有做任何事情,我在它的結尾添加了暫停,並且它沒有顯示任何錯誤或任何內容。我錯過了什麼? –

+0

更新了代碼。 – wOxxOm

相關問題