我需要使用.bat文件启动或停止5个Windows服务。我一直在做下面的事情。但是,一旦我运行这个,我得到一个错误 - %x服务未找到。
for %%x in (
"service 1"
"service 2"
"service 3"
) do net start | find %%x > nul 2>&1
if not .%errorlevel%.==.0. net start %%x >nul
goto skip
:skip
pause
答案 0 :(得分:1)
for %%x in (
"service 1"
"service 2"
"service 3"
) do (
net start | find %%x > nul 2>&1
if errorlevel 1 net start %%x >nul
if errorlevel 1 goto skip
)
:skip
在您的代码中,只会在net start
循环中执行第一个for
。您需要将命令形成code block
(带括号的行序列)。
缺点是当解析code block
时,任何 %var%
将被当时%var%
的值替换
因此,您需要使用errorlevel
,if errorlevel n
的原始语法,这意味着&#34;如果errorlevel是n 或大于n &#34; < / p>
由于您似乎想要重试,因此在errorlevel = 1 or more
之后net start
的情况下要执行的指令将重试,并且我假设您要转到{ {1}}如果重试失败。请注意,如果原始尝试成功,skip
将为errorlevel
(我假设),因此0
将失败并且不执行重试,因此{{1将保留在if
。