web-dev-qa-db-ja.com

プロセスが継続して実行されているかどうかを確認し、実行されていない場合は複数のプログラムを起動して、それ自体を終了します

私はstackoverflowで this を見つけました、そしてそれのコードはこれです:-

@echo off
Set "MyProcess=calc.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%">nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "%MyProcess%")
pause 

しかし、私の問題は異なります。ヘッダーによると、プログラムが実行されているかどうかを継続的に確認したいと思います。だから私はこのような[〜#〜] my [〜#〜]バッチファイルを作成しました。

@echo off
:B
Set "MyProcess=cmd.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "1.bat","" "2.bat", "" "3.bat")
goto B    

これも機能していないようです。

そして、それらすべての中で最も難しいことは、私はバッチの初心者なので、ここでほとんどのことを理解していません

ありがとうございました。

3
Bhanu Kumar

プロセスが継続的に実行されているかどうかを確認し、実行されていない場合は複数のプログラムを開始して、それ自体を終了します

プログラムが実行されているかどうかを継続的に確認したい

以下は、バッチスクリプトを1つずつ呼び出す必要がある場合に機能するはずであり、基本的には、TASKLISTコマンドが実行されていることを確認するために、マシンのメモリ内で確認するだけです。

実行されていない場合は、バッチスクリプトを次々に呼び出します。それ以外の場合は、:Bルーチンに移動して、チェックをもう一度やり直してください。実行中の場合、ECHO"%MyProcess%" est en cours d^'executionから:Bルーチンに移動し、再度確認して確認します(継続的な確認)。

警告:呼び出されたバッチスクリプトの最後にGOTO EOFがあり、EXITではないこと、または渡されないことを確認してください。元のバッチがループチェックを続行できるように、呼び出し元に制御を戻します(以下の例を参照CALLED SCRIPT Examples)。

ロジックをチェックしているスクリプト(これを使用)

@ECHO OFF
:B
SET MyProcess=cmd.exe
ECHO "%MyProcess%"
TASKLIST | FINDSTR /I "%MyProcess%"
IF ERRORLEVEL 1 (GOTO :StartScripts) ELSE (ECHO "%MyProcess%" est en cours d^'execution)
GOTO :B 

:StartScripts 
::: //-- Put in the full path to the batch scripts to call
::: //-- Be sure the security context this process runs as has access to execute the below called batch scripts
CALL "C:\Path\1.bat"
CALL "C:\Path\2.bat"
CALL "C:\Path\3.bat"
GOTO :B 

(呼び出されたバッチスクリプトには、abobeスクリプトが実行されているマシンのメモリで実行されていないと判断されたプロセスを開始するロジックがあると思います。したがって、GOTO EOFが最後であることを確認してください。それらはすべてそうです。それがうまくいくかどうかを自分で知るために、これらのロジックを見る必要があります。)

呼び出されたスクリプトの例(1.bat、2.bat、3.batなど)

<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<END OF LOGIC>

::: Keep GOTO EOF here to pass control back to the caller
GOTO EOF

その他の注意事項

  • 呼び出された3つの別々のバッチスクリプトが実行するのと同じバッチスクリプトにロジックを配置し、それらをラベル\ルーチンとして呼び出すこともできますが、それらのロジックを確認して、機能することを確認する必要があります。それぞれの下部にGOTO EOFがある限り、同じように機能しますが、この方法では、すべてのロジックが同じ1つのバッチスクリプトファイルに含まれます。

  • TASKLISTFINDSTRを使用したバッチスクリプトロジックは、質問で示した例のように[/NH /FI imagename eq]構文がなくても、正常に機能するはずです。例のようにFINDSTRではなくFINDを使用することも問題ありません。

  • 私はこれに似たバッチのロジックを持っており、サーバーで実行されているプロセスをローカルおよびリモートでチェックして、あなたが行っているようなものを自動修正するか、誰かが何か注意を払う必要があることを示す電子メールを送信するので、これを確認しました私が提供したスクリプトロジックのメソッドは成功しました。それ以外の場合、最適化、確認などを行うためのすべてのロジックがありません。


追加のリソース

1
Pimp Juice IT