電子書籍の厳選無料作品が豊富!

プログラムの連続起動をバッチファイルで作成しています。
本体(A.EXE)を連続起動させるべくfor文でテキストファイルを読み込み引数を与えながら起動して、ということをしたいのですが、A.EXEは自動で終了するもののワケあって終了した状態を取得できません。
そこで監視(B.EXE)を実行してA.EXEの終了を待つプログラムを用意しました。

for文の中でA.EXE起動→5秒待ち→B.EXE起動(バッチは待ち状態)→A.EXE終了→B.EXE終了(バッチ待ち解除)→2回目のA.EXE起動…という流れを想定していますが、B.EXEが待ち状態にならずA.EXEが実行されてしまいます。

バッチの中身をコマンドプロンプトで実行するとB.EXEは待ち状態となるのですがバッチ実行すると待ち状態になりません。
なにが原因かわからず質問いたしました。
ご助力いただけると助かります。
以下はバッチ内容です(for文は除きます)。
-----------------
start C:\work\A.EXE
timeout 5
start /w C:\work\B.EXE
-----------------
よろしくお願いします。

A 回答 (5件)

startコマンド使わずに書けばいいんじゃないですか?


プロセスが終了するまでバッチファイルの実行は止まっているハズですが。
/wait付きとどこが違うのかは疑問…かなぁ。

それとも、a.exeは子プロセス起動して終了してしまうんですか?
そういう状況では厳しいかも知れませが…
b.exeからa.exeを起動させる。とかできませんかね?

プロセスの親子関係とか列挙する方法は…あったかなぁ。
b.exeからa.exeを子プロセスとして起動して、a.exeが起動した子プロセス(b.exeから見て孫プロセス)の終了状態も監視。
a.exeプロセスの孫プロセス(b.exeから見てひ孫プロセス)が起動されたら、その終了状態も監視……ってことになりますかね。
まぁ、a.exeがどういうモノなのか不明では手の打ちようがありませんが。

ウィンドウタイトルでの判定だと…場合によっては正しく判定できませんよ?
# 列挙したときには別のウィンドウタイトルになっているかも知れない。
# オーナードローとかで本来のウィンドウタイトルとは別のモノが表示されているかも知れない。
# 別のバッチファイルやスケジュールで起動したモノかも知れない。
    • good
    • 0

バッチで次に行っちゃう場合、AもBも起動したままなんですか?


特にBが。

バッチでBだけを(Aを監視しないようにして、Aが終わる程度の時間sleepさせて)回してどうなんだろう?

これでも起きるならバッチの特性ということになっちゃいますねー、
    • good
    • 0

Windows Power Shell で必要な機能は実現出来ると思われますので調べてみて下さい。


(DOS コマンド cmd.exe の機能拡張版)

windows power shell マイクロソフト 説明書 OR マニュアル  等でサーチ
==>
http://technet.microsoft.com/ja-jp/scriptcenter/ …
    • good
    • 0

時間を測るか・・単純にフォ ネキストでループで時間取るとか・・

この回答への補足

ありがとうございます。
時間での判定が厳しいためウインドウタイトルで終了判定となった経緯があり、即興でB.EXEを用意しました…。

補足日時:2014/01/01 16:33
    • good
    • 0

start /w ? start /wait ?



まだアイデアがわきませんが、Aの終了をどんな風に判断していますか?
そのプロセスを監視しているということですか?
手動だと起動等で時間がかかるから、Aが起動しているけど、
バッチの場合待ち時間が短すぎてAが起動する前にBがおわっちゃっているとか。
5びょうもあれば十分ですか。。。。

この回答への補足

ありがとうございます。
A.EXEの終了判定はB.EXEでウインドウタイトルを取得しそのタイトルが消えたら、というものです。
5秒のウエイトでウインドウタイトルを取得するのには十分なはずなのですが…。

補足日時:2014/01/01 16:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!