2013-02-27 129 views
0

我有一个相当简单的任务,但在命令行脚本中总是noob。我搜索了一下,发现了一些基本命令与Windows机器上的服务进行交互,但没有检查服务是启动还是停止。我希望有人可以帮助一个脚本,将停止3个服务,检查以确保所有3个都停止,并且一旦所有的都停止了。再次启动它们。我需要确保在启动任何3个备份之前,所有3个都已停止。我知道如何停止和开始服务,但剩下的就是我卡住的地方。如何停止Windows服务,检查它是否已停止,并使用命令行重新启动它?

net Stop S1 
net Stop S2 
net Stop S3 

//Check if all 3 are stopped 

//If all 3 have been stopped successfully 
net start s1 
net start s2 
net start s3 

我想出了这一点,但不认为语法是正确的......

net stop PriceIdxImport 
net stop RawDataImportDB 
net stop DBDailyTrxProcessService 

set Pstate = sc query PriceIdxImport state 
set Rstate = sc query RawDataImportDB state 
set Dstate = sc query DBDailyTrxProcessService state 

if Pstate == Inactive if Rstate == Inactive if Dstate == Inactive GOTO sub_StartServices 

:sub_StartServices 
net start PriceIdxImport 
net start RawDataImportDB 
net start DBDailyTrxProcessService 

好吧,我把上面的脚本,并将其改变成而loop..it犯规正确地做循环?它检查状态,然后退出:(

echo on 
net stop PriceIdxImport 
net stop RawDataImportDB 
net stop DBDailyTrxProcessService 
ping -n 5 127.0.0.1 > nul 
set Pstate = Sc query PriceIdxImport |find /i "STOPPED" 
set Rstate = sc query RawDataImportDB |find /i "STOPPED" 
set Dstate = sc query DBDailyTrxProcessService |find /i "STOPPED" 
set Condition="false" 

while Condition="false";do if Pstate neq "" (if Rstate neq "" (if Dstate neq ""   GOTO sub_StartServices));done 
exit 

:sub_StartServices 
set Condition="true" 
net start PriceIdxImport 
net start RawDataImportDB 
net start DBDailyTrxProcessService 
+0

批量变量赋值必须这样做:'设置VAR = foo的bar'(不带空格周围的'= ') – 2013-02-27 21:21:47

+0

好吧我把3个语句改成了没有空格,所以它适合var = xxx格式 – user1732364 2013-02-28 14:45:16

回答

0

请试试这个脚本

echo on 
:sub_StopServices  
net stop PriceIdxImport 
net stop RawDataImportDB 
net stop DBDailyTrxProcessService 

set Pstate = Sc query PriceIdxImport |find /i "STOPPED" 
set Rstate = sc query RawDataImportDB |find /i "STOPPED" 
set Dstate = sc query DBDailyTrxProcessService |find /i "STOPPED" 

if Pstate neq "" (if Rstate neq "" (if Dstate neq "" (GOTO sub_StartServices) else (GOTO sub_StopServices)) else (GOTO sub_StopServices)) else (GOTO sub_StopServices) 
exit 
:sub_StartServices 
net start PriceIdxImport 
net start RawDataImportDB 
net start DBDailyTrxProcessService 
+3

我推荐在'sc start | stop'上使用'net start | stop',因为后者是非阻塞的。 – 2013-02-27 19:59:37

+0

使得它更有理由使用它。加上sc是专门为处理服务而编写的...尽管最终如果日期归结为s编码的编码:) – 2013-02-27 20:51:55

+0

是否需要非阻塞操作取决于实际要求/情况。在OP的情况下,我肯定会更喜欢阻塞操作,因为这样可以避免在循环中检查服务状态(以及超时)。 – 2013-02-27 21:18:59