2016-10-04 4 views
2

次のスクリプトを使用して、特定の名前付きウィンドウが開いているかどうかを確認しています。名前付きウィンドウが開いているかどうかを確認して終了するバッチファイル

私はこのスレッドからそれを得た: - オープンであることが判明した場合、理想的に私は、ウィンドウを閉じるには、他の部分を拡大していきます

How do you test if a window (by title) is already open from the command prompt?

@For /f "Delims=:" %A in ('tasklist /v /fi "WINDOWTITLE eq test.bat - Notepad"') do @if %A==INFO (echo Prog not running) else SET "BREX=Awesome" &echo %BREX% 

残念ながら、このスクリプトを実行すると、私のelse文字列の3つのインスタンスが返されますか?

screenshot

つのインスタンスを返すにこれをダウン軽減する方法はありますか?

+0

1.あなたは、同じコマンドライン/ブロックでそれを読ん* *変数 'BREX'を設定している[遅れ拡張](http://ss64.com/nt/delayedexpansion.html) 。 2. 'tasklist'は' for/F'ループを3回繰り返す2つのヘッダ行を返します。 'skip = 2'オプションを追加してください。 – aschipfl

+1

タスクリストで/ NHオプションを使用するだけです。 – Squashman

答えて

0

をループしているとして、あなたが本当にあなたがこれを行うことができ、CMDプロンプトから1行でこれを行うにしたい場合は、複数行の出力を取得しています。

cmd /v:on /c "@For /f "Delims=:" %A in ('tasklist /v /nh /fi "WINDOWTITLE eq test.bat - Notepad"') do @if %A==INFO (echo Prog not running) else (SET "BREX=Awesome") &echo !BREX!" 

または条件付き実行を使用します。あなたが必要とするので、

tasklist /v /nh /fi "WINDOWTITLE eq test.bat - Notepad" |findstr /B /C:"INFO: No tasks are running">nul && (echo Program not running) || (echo Awesome) 
1

代わりにfindstrを使用できます。あなたは、出力の各行

tasklist /v /fi "WINDOWTITLE eq test.bat - Notepad" | findstr /C:"No tasks are running" 
if %errorlevel% NEQ 0 (
    echo awesome 
) else (
    echo Prog not running 
) 
+0

/NHオプションはヘッダーを削除し、tasklistからの一致のみを出力します。 – Squashman

関連する問題