2017-12-19 18 views
0

この質問に対する回答を見つけるのは苦労しています。私は特に、バッチファイルでコマンドを実行するのは、プログラムが終了した後でなければなりませんが、バッチファイルによって起動されなかったプログラムです。Windowsバッチファイル - バッチファイルで開始されていないプログラムクローズ後にコマンドを実行する方法

私の問題はこれです。私が実際に待っていたいバッチファイルで起動しているプログラムは、別のプログラムを起動して別のプログラムを起動しています。おそらくこれは意味をなさないでしょうが、それはゲームランチャーだからです。それはファイナルファンタジーXIVです。それを起動するために起動される通常のプログラムはffxivboot.exeであり、ffxivlauncher.exeが起動します。これはログインウィンドウです。ログインすると、ffxiv_dx11.exeが起動します。だから私はもともとffxivboot.exeを待つように書いていましたが、そのプロセスは実行されていないので、私はそれを待つことができません。

ここで(簡単にするために除外パス)私のファイルです:

taskkill /im someprogram.exe 
ffxivboot.exe 
timeout /t 60 /nobreak 

### ??? need to wait on ffxiv_dx11.exe to close before executing next command 

someprogram.exe 

私はそれが私にログインするのに十分な時間を与えるように待機するようにタイマーを追加 - ffxiv_dx11.exeプロセスが終了するまで開始されないためログインしてください。

私は何をしようとしていますか?バッチファイルから開始されたタスクを終了するのを待っているときだけの結果が得られるので、これに対する答えを探すのは難しいです。しかし、私が言ったように、もう一つは別のものを起動し、もう一つは別のものを起動します。元のプロセスはもはや実行されていません。

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

答えて

1
taskkill /im someprogram.exe 
ffxivboot.exe 
timeout /t 60 /nobreak 

:repeat 
::### ??? need to wait on ffxiv_dx11.exe to close before executing next command 
tasklist /fi "imagename eq ffxiv_dx11.exe"|find /i "=========================" >nul 2>nul &&(
    w32tm /stripchart /computer:localhost /period:10 /dataonly /samples:2 1>nul 
    goto :repeat 
) 

someprogram.exe 

これは高架実行する必要があるVBSファイルです。この

+0

ありがとう、完璧に働いた! – Zatos

0
Set WshShell = WScript.CreateObject("WScript.Shell") 
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 
Set objEvents = objWMIService.ExecNotificationQuery _ 
    ("SELECT * FROM Win32_ProcessStopTrace") 

Do 
    Set objReceivedEvent = objEvents.NextEvent 
    msgbox objReceivedEvent.ProcessName 
    If lcase(objReceivedEvent.ProcessName) = lcase("Notepad.exe") then 
     Msgbox "Process exited with exit code " & objReceivedEvent.ExitStatus 
     WshShell.Run "c:\Windows\notepad.exe", 1, false 
    End If 
Loop 

を試してみてください。それはプログラムが終了するのを待って、それがメモ帳であるかどうかをチェックして、それを再起動することになります。

昇格したコマンドプロンプトtaskkill /f /I'm wscript.exeに入力すると、停止します。

関連する問題