If statement 对多个字符串使用IF语句[批处理]

If statement 对多个字符串使用IF语句[批处理],if-statement,batch-file,If Statement,Batch File,我正在编写软件来扫描预定的服务,并在它们停止时启动它们。不幸的是,有些服务名称有空格,因此如果我这样做: for %%a in (MSSQLSERVER,SQLSERVERAGENT,Cardinal SPD Delivery Package Service,AuthenticationServiceHost,CommunicationService,CqiProcessorService,IISADMIN,MobileAutmationAgentService,MSMQ) do ( 发生的事

我正在编写软件来扫描预定的服务,并在它们停止时启动它们。不幸的是,有些服务名称有空格,因此如果我这样做:

for %%a in (MSSQLSERVER,SQLSERVERAGENT,Cardinal SPD Delivery Package Service,AuthenticationServiceHost,CommunicationService,CqiProcessorService,IISADMIN,MobileAutmationAgentService,MSMQ) do (
发生的事情是,当我这样做时,它将Cardinal SPD交付包视为三个独立的服务,而不是一个

net start "%%a"
比如说。 我发现works的另一种选择是将服务放在文本文件中并执行以下操作

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

但是我更喜欢第一种方法,因为它更干净。有什么建议吗?

请在通话中重复引用所有服务名称,不要引用
%%a

for %%a in ("MSSQLSERVER","SQLSERVERAGENT","Cardinal SPD Delivery Package Service","AuthenticationServiceHost","CommunicationService","CqiProcessorService","IISADMIN","MobileAutmationAgentService","MSMQ") do (
net start %%a
)
或仅对多个单词进行双引号,并在调用时从
%%a
中删除引号:

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

第二种方法对我不起作用,因为在我启动服务之前,我会执行
net start | find/I“%%a”
,如果我只引用多个单词的服务,它将不起作用,因为它将双重引用。我尝试了第一个,得到:
NET START | FIND/I“Cardinal SPD传递包服务”1>nul call:startService)文件未找到-基本文件未找到-SPD文件未找到-传递文件未找到-包文件未找到-服务
尝试将第一个文件与
net start | find/i%%a
一起使用(删除引号)。为我工作Win7@bill虽然services.txt方法看起来不那么整洁,但它具有高度的结构化、可靠性和健壮性,因为您可以毫无问题地处理大型列表和空间,它非常灵活,并且您可以轻松查看正在使用的每个服务名称。我已经用了很多年了,因为这项任务最终会更容易完成。谢谢你,莉兹,我想我会同意的。只是有很多头痛的第一种方法工作正常。再次感谢大家的帮助:)