2017-08-31 5 views
1

私が書いたバッチファイルに問題があり、プロセスAが実行されていないことを検出してプロセスBを終了させると仮定しています。プロセスAがwmic (この間にループしています)、実行されていないことが検出されたら、私は他のプロセスでtaskkillを使用します。問題は、私はWMIC条件アップに一致するpython.exeプロセスを持っているので、実行している...の値が等しくなるように見えるが、それはいくつかの理由のためにif文を入力していないことをタスクマネージャでステートメント

SETLOCAL EnableExtensions 
set EXE=python.exe 

    :RUNNERON 
    FOR /F "skip=1 delims=" %%x IN ('wmic process where "CommandLine Like '%%some text to match%%' and Caption='python.exe'" get caption') DO for /F "delims=" %%j in ("%%x") do (

     echo Current process name: %%j :: This prints "python.exe" 
     echo Required process is: %EXE% :: This prints "python.exe" 
     IF %%j == %EXE% (
      echo inside if 
      goto RUNNERON 
     ) ELSE (
      echo inside else 
     ) 
    ) 
    echo Runner is done - killing watchdog process 
    taskkill /F /im "pythonw.exe" 

    pause 

ですそれはループの中で立ち往生しなければならないが、何らかの理由で、 "内側のelse"がコンソールに表示されている、私は間違って何をしているのかわからない、それは私が2つを比較する方法で何かのように思える..

ありがとう

EDIT: 私はそれを解決しました、問題は最初のループの "delims"でした。一度すべてを削除したらうまく働いた。 そう結論する - これはライン "のための" 作業です:

FOR /F "skip=1" %%x IN ('wmic process where "CommandLine Like '%%forking import main%%' and Caption='python.exe'" get caption') DO for /F "delims=" %%j in ("%%x") do (
+1

のヒントをいくつか:おそらく 'if/i" %% j "=="%exe% "...'を使う方が良いでしょう。 '/ i'は大文字と小文字を区別しない(大文字と小文字を区別しない)ことを意味しています。迷いのあるスペースがある場合(削除された答えが示唆されている場合)、 'echo Current Process is:%% j:'のようなものを使用してください(コロンが値のすぐ側に印刷されているので、 '%EXE% 'と同じです)。 – TripeHound

+0

ヒントをありがとう – Noam

答えて

1


スクリプトの最も重要な部分:

FOR /F "skip=1 delims=" %%x IN ('wmic process where "CommandLine Like '%%some text to match%%' and Caption='python.exe'" get caption') DO for /F "delims=" %%j in ("%%x") do (

は次のようになります。

For /F "Skip=1 Delims=" %%x In ('"WMIC Process Where (Caption='%EXE%' And CommandLine Like '%%some text to match%%') Get Caption"') Do For /F "Delims=" %%j IN ("%%x") Do (
+0

あなたの答えをありがとうが、私は別の方法でそれを解決し、私の更新された記事を参照してください – Noam

関連する問題