2016-06-28 11 views
0

2つのサービスが存在するかどうかを確認しようとしています。いずれかが存在しない場合は、「いいえ」と表示されます。そうでない場合は、「はい」と印刷されます。私が試みたのは次のとおりです:バッチコマンドでネストされたIf-Else

@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%は2番目のケースで値を変更していません。 service2が存在しない場合でも、Yesを出力します。これに関する助けを得ることはできますか?

+0

...コードを複雑にオーバーすることなく、2つの以上の条件をテストすることができます**?あなたのコードは私のWindowsマシンで正常に動作するようです。 –

+0

私はservice2が有効なサービス名ではないことを意味します – HunterrJ

答えて

2

これを試してください。

@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 
) 

これはdelayed expansion

+0

これを試しましたが、最初のif条件のelse部分を実行しました。 – HunterrJ

+0

cmd.exeの複数のインスタンスが起動していた問題がありました。それらを殺した後にうまく動作します。ありがとう、これは時間以来これを探していた。 – HunterrJ

+0

@iamsirjayesh括弧( '()'の中の変数は遅延展開が必要なため、 '!' -versionを使います。しかし、 '%service%'変数はブロック内で変更されないので、実際にはそれを必要としません(これはベストプラクティスです)。 –

4

つ以上の条件を「AND」というクエリを組み立てるには、いくつかの方法がありますが問題です。これは非常に簡単な方法です:あなたは、サービス2が存在しない場合でも、**で何を意味しています

@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 
)  

この方法はまた、

+0

Aacini:非常にクリアなコードで、各エラーレベルの値を連結しています。代わりのソリューションをありがとう、それは間違いなく実装を見ていきます。 – HunterrJ

関連する問題