2012-11-09 56 views
0

我正在編寫軟件來掃描預定的服務,並在它們停止時啓動它們。不幸的是一些服務名稱有空格,所以如果我這樣做:在多個字符串上使用IF語句[批處理]

for %%a in (MSSQLSERVER,SQLSERVERAGENT,Cardinal SPD Delivery Package Service,AuthenticationServiceHost,CommunicationService,CqiProcessorService,IISADMIN,MobileAutmationAgentService,MSMQ) do (

會發生什麼事是,它把紅衣主教SPD交付包,當我爲做

net start "%%a" 

三個獨立的服務,而不是一個例。 ,我發現,工作是把這些服務在一個文本文件,做

for /f %%a in (services.txt) do(

但我寧願因爲它的很多清潔做第一種方法替代。有什麼建議麼?

回答

0

無論是雙引號的所有服務名稱和電話不報價%%a

​​

或雙引號只有多個單詞,當你把它從%%a刪除引號:

for %%a in (MSSQLSERVER,SQLSERVERAGENT,"Cardinal SPD Delivery Package Service",AuthenticationServiceHost,CommunicationService,CqiProcessorService,IISADMIN,MobileAutmationAgentService,MSMQ) do (
net start %%~a 
) 
+0

第二種方式對我不起作用,因爲在我開始服務之前,我在'net start | find/i「%% a」',如果我只引用多個字服務,它將不起作用,因爲它會雙引號。 我試了第一個,我得到: NET NET | FIND/I「」紅衣主教SPD配送套餐服務「」 1> NUL 電話:startService )未找到 文件 - 紅衣主教找不到 文件 - 未找到SPD 文件 - 交付找不到 文件 - 包裝 未找到文件 - SERVICE' – bill

+0

嘗試使用'net start | find/i %% a'中的第一個(刪除引號)。適用於Win7 –

+1

@bill services.txt方法可能看起來不太整潔,但它具有高度結構化,可靠和強大的功能,因爲您可以處理大型列表,空間沒有問題,而且靈活,您可以輕鬆地看到每個服務名稱正在處理。我已經使用了好幾年了,因爲這項任務最終實際上更容易。 – Lizz