2016-05-26 11 views
0

特定のプロセス(およびバッチファイル)が実行されていない場合にのみコマンドを実行するWindowsバッチファイル(* .bat)ファイルを作成する必要があります。Windowsバッチファイル内で.batファイルが閉じるのを待つ

私は(* .EXE)ここでのプロセスのために機能するソリューションを見てきました:バッチファイルはCMD」として表示: How to wait for a process to terminate to execute another process in batch file

私は非常によく似た何かをしたい、しかし、1つの困難です。 「TASKLIST」コマンドに「exe」と入力します。

"C:\ mybatch.bat"のように、特定のbatファイルが実行されているかどうかを確認したい場合は、それが閉じられるまで待機します。

+0

'tasklist/v'はウィンドウのタイトルを示します。それはウィンドウのタイトルのようです - cmdは実際のタイトルの変更を気にしません。 –

答えて

0

特定のbatファイルmybatch.batは、それが一目で見ることができるよりも厳しい作業になる可能性が実行されているかどうかの確認。

tasklist /V内の特定のウィンドウタイトルをお探しだけでなく、wmic process where "name='cmd.exe'" get CommandLineCommandLineプロパティをテストするには、いくつかの想像状況下を失敗することがあります。

第1。あなたは

  • mybatch.batはない呼び出し、別のバッチスクリプト(S)を含むをしていることを確認しmybatch.bat
  • から他のすべてのtitleコマンドを削除mybatch.bat
  • の先頭にtitle ThisIsDistinguishingStringコマンドを追加することができますコマンドtitle

    :testMybatch 
    tasklist /V /FI "imagename eq cmd.exe" | find "ThisIsDistinguishingString" > nul 
    if errorlevel 1 (
        rem echo mybatch.bat batch not found 
    ) else (
        echo mybatch.bat is running %date% %time% 
        timeout /T 10 /NOBREAK >NUL 2>&1 
        goto :testMybatch 
    ) 
    

    第二:次のように続いてチェックerrorlevel

find commandから返されました。それ以外の場合は、wmic Windows Management Instrumentation command出力は

wmic process where "name='cmd.exe'" get /value 

を助けることができるなら、あなたは、特定の場合

wmic process where "name='cmd.exe'" get CommandLine, ProcessID 

wmicは、いくつかのWin32_Process class特性、特にCommandLineを返すことができることを注意、に狭め、その出力にmybatch.batを検出できるチェックプロセスが別のユーザーアカウントで起動されたか、昇格されました(管理者として実行)。
昇順wmicは、すべてのプロパティを完全に返します。

+0

ありがとうございます。あなたのソリューションは私のニーズに適しています。 – zaidgs

0

あなたの言うことは、デフォルトで起こります。

はクレート新しい.BATファイルを(のは1.bat言わせて)、テストし、それ

カルク

mspaint

保存中に入れて、それを実行します。 電卓が起動します。パイロットブラシは、電卓を閉じたときにのみ起動します。

+0

あなたは私の質問に誤解しています。実行しているかどうかを確認する必要があるバッチファイルは、書き出す必要があるバッチファイルの前または外で実行されます。 – zaidgs

関連する問題