2013-12-20 6 views
7

バッチファイル(バッチファイル)から2つのプログラムを起動したい - 数秒間実行する。次に、メインバッチファイルで、両方が終了してからメイン実行を続けるのを待っています。それはまったく可能ですか?Windowsのバッチファイルでフォークできますか?

+0

http://stackoverflow.com/questions/2572176/how-to-make-the-batch-file-wait-until-another-batch-file-completes-execution –

+0

@DmitriyBotov:* one *バッチ用ですしかし、ファイルのみ。彼らは同時に2つを走らせたいと思っていて、* both *が止まったら実行を続けます。 – Joey

答えて

7

あなたは、並べ替えのことができます。

@echo off 
set Token=MAIN_%RANDOM%_%CD% 
start "%Token%_1" cmd /c child1.cmd 
start "%Token%_2" cmd /c child2.cmd 
:loop 
ping -n 2 localhost >nul 2>nul 
tasklist /fi "WINDOWTITLE eq %Token%_1" | findstr "cmd" >nul 2>nul && set Child1=1 || set Child1= 
tasklist /fi "WINDOWTITLE eq %Token%_2" | findstr "cmd" >nul 2>nul && set Child2=1 || set Child2= 
if not defined Child1 if not defined Child2 goto endloop 
goto loop 
:endloop 
echo Both children died. 

child1child2はちょうどpauseを実行していました。これは多かれ少なかれ一意のトークンを使用して子バッチファイルを識別します。それらはstartで独自のウィンドウで開始され、それぞれに特定のウィンドウタイトルが与えられます。そのウィンドウタイトルを使用して、tasklistを使用して再度検索し、それらがまだ実行中かどうかを判断できます。

バッチファイルがまだ実行されているかどうかを調べるのはやや難解です。 tasklistは、ウィンドウのタイトルフィルタを使用して実行されますが、賢明なエラーレベルは返されません。そのため、プロセス名を取得するためにfindstrにパイプする必要があります(エラーメッセージをピックアップして言語に敏感でないようにするため)。

+0

それは動作します!まだスケジュールされたタスクとして動作するかどうかは分かりますか? – Helvio

関連する問題