Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理命令中嵌套If-Else_Batch File_If Statement_Service_Nested_Errorlevel - Fatal编程技术网

Batch file 在批处理命令中嵌套If-Else

Batch file 在批处理命令中嵌套If-Else,batch-file,if-statement,service,nested,errorlevel,Batch File,If Statement,Service,Nested,Errorlevel,我正在检查是否有两项服务。如果其中一个不存在,则应打印“否”,否则打印“是”。我尝试的是: @echo off set service1=present_service set service2=not_present sc query %service1% | find "does not exist" >nul if %ERRORLEVEL% EQU 1 ( sc query %service2% | find "does not exist" >nul if

我正在检查是否有两项服务。如果其中一个不存在,则应打印“否”,否则打印“是”。我尝试的是:

@echo off
set service1=present_service
set service2=not_present

sc query %service1% | find "does not exist" >nul
if %ERRORLEVEL% EQU 1 (
    sc query %service2% | find "does not exist" >nul
    if %ERRORLEVEL% EQU 1 (
      echo Yes
    ) else (
      echo No
    )    
) else (
echo No
)
如果我检查一个,它工作正常。在第二种情况下,%ERRORLEVEL%可能没有改变其值。即使service2不存在,它也会打印Yes。我能在这方面得到帮助吗。

试试这个

@echo off
setlocal EnableDelayedExpansion
set service1=present_service
set service2=not_present

sc query %service1% | find "does not exist" >nul
if %ERRORLEVEL% EQU 1 (
    sc query !service2! | find "does not exist" >nul
    if !ERRORLEVEL! EQU 1 (
      echo Yes
    ) else (
      echo No
    )    
) else (
echo No
)

这是一个问题,

有几种方法可以组合一个和多个条件的查询;这是一个非常简单的方法:

@echo off
setlocal
set service1=present_service
set service2=not_present

sc query %service1% | find "does not exist" >nul
set "bothServices=%ERRORLEVEL%"
sc query %service2% | find "does not exist" >nul
set "bothServices=%bothServices%%ERRORLEVEL%"

if %bothServices% EQU 11 (
   echo Yes
) else (
   echo No
)    

此方法还允许在不使代码过于复杂的情况下测试2个以上的条件…

即使不存在service2,您的意思是什么?您的代码在我的Windows计算机上似乎运行正常。我的意思是service2不是有效的服务名称。尝试了此操作后,它执行了first if条件的else部分。问题是启动了多个cmd.exe实例。杀了他们后效果很好。谢谢,我从几小时后就开始找这个了。@iamsirjayesh视情况而定,括号内的变量使用-版本,因为它们需要延迟扩展。然而,%service%变量实际上并不需要它,尽管这是imo的最佳实践,因为它们在块内不会改变。@Dennis~感谢您的详细解释,它肯定会在后续步骤中帮助我。再次感谢。Aacini:非常清晰的代码,它连接了每个错误级别的值。感谢您提供的替代解决方案,我们一定会考虑实施它。