こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バッチファイルでウインドウを閉じる方法ってありますか?

こんにちは、皆さんの知恵を貸してください。

自分はプログラムとかコマンドプロンプトなどはまったくの初心者ですが、研究で必要に迫られて現在勉強中・修行中の大学院生です。

OSはウインドウズXPです。コマンドプロンプトを起動して、とある計算コードを走らせます。計算時間が10時間弱かかるので連続計算させる為にバッチファイルを作ることにしました。
作製してみたところ、コードのexeファイルが起動すると新しいウインドウができてそこで実行されます。そしてそのウインドウを閉じないとバッチファイルに記述した次のファイルが読み込まれません。

週末とか、深夜とかにPCの前にいなくても計算を走らせる為に組んだバッチですが、手動でウインドウを消すのであればまったく無意味です。

ここで質問が2つあります。


1.計算が終了した、と認識させるにはどういう手段があるでしょう?

2.計算が終了したらそのファイル(ウインドウ)を閉じるようなコマンドって存在しますか?


1で計算終了を判断し、2でそのウインドウを削除する事ができれば次の計算が走るようになると思うのですが…
IFとかCALLとか考えてみたのですが、どうにもわからずパニックに陥っててます。どうか皆さん、よろしくお願いします。
(;_;)

投稿日時 - 2005-06-06 12:44:44

QNo.1432401

すぐに回答ほしいです

質問者が選んだベストアンサー

問題を整理してみましょう。

現在実現したいことは、こういうことでよろしいでしょうか。

1.計算時間が10時間程度かかるEXE形式の実行ファイルがある。

2.それをバッチファイルから、順次呼び出し、最後まで勝手に動かしたい。

これを実現するためには、いくつか確認すべきことがあります。
まず、大前提として、そのEXEのプログラムは自分を終了させる方法をもたないのでしょうか?
それがいわゆるGUIアプリケーションで、終了ボタンや右肩のXボタンを押さなければ終了できないというのであれば、そもそもバッチファイルから連続稼動はあきらめるしかありません。できないものはできないのです。
そのEXEが、どういった出自のものかわかりませんが、例えば起動時にオプションを渡すことで、計算終了後に自動的に終了するとか、そういった機能があれば、問題ありませんが、そうでないならバッチファイルから制御するのは、あきらめて別の方策を考えるほうが無難です。

バッチファイルは、自ら終了しないプログラムに対して、何か制御をするような機能は有していません。

また、計算が終了したことを知る方法も、そのEXEが提供していないのならば、ありません。

しかし、例えば以下のような条件を満たすのであれば、別の方法が可能かもしれません。バッチファイルよりは敷居が高いですけど。

A.少なくともマウスを使わず、キーボードだけの操作で終了が可能である。
B.起動すると、ウインドウのタイトルバーにアプリ名等が表示される。
C.計算終了した旨が、やはりウインドウのタイトルバーに表示される。

WSH上で、JScriptやVBScriptを組み合わせてコーディングすれば、起動されたタイトルバーの文字列からウインドウを特定し、そこに対してキー入力を送ることができます。
まあ、仮にA.の条件が満たせなかった場合、マウスイベントを送り込めるフリーウェアもいくつかあるので、そういったものを使う方法もありますが・・・。

いずれにしても、この無理やりな方法を実現するためには、B.やC.の方法は必須でしょう。

現在わかるところから言えるのは、このくらいですね。
もう少し、そのEXE自体の仕様がわかれば別の対処もあるかもしれませんけど、問題の根幹は、そのEXE自体の仕様だという認識をもってください。

以上 参考までに。

投稿日時 - 2005-06-06 14:12:09

お礼

御礼が遅くなって申し訳ありませんでした。

やはりバッチファイルからの制御は無理っぽいですね。列挙されたABCのうち、Aはムリっぽいです。BとCは表示されていると思います。

ただ、ウインドウをたくさん開くことで処理速度は遅くなりますが、同時計算が可能ということがわかりましたので休日や連休などはその方法で何とか計算できるようになりました。

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

投稿日時 - 2005-06-17 15:19:27

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

プログラムがきちんと終了していないのが原因だと思います。計算が終わった後にプログラムが何をしているか分かりませんけど、空ループか、データ入力待ち等のアイドリングしてるんだと思います。

人間としては計算終了はどうやって判定していますか?タイトルに終了メッセージがでるのでしょうか?Windowsの中にメッセージが出るのでしょうか?ファイルが出力されるとかで計算終了が分かるのでしょうか?
まさかCPU占有率が0%になるから、終わったと判定してるということはないと思いますが・・

>計算が終了するとCPU稼働率が100%から数%まで落ちます

これはプログラムが終了していなくても、こういう結果になる場合があります。

同時に走らせることが可能ならば、リレーはアバウトでも大丈夫そうですね。9時間位ずつずらして、Windowsのタスクで走らせるなどの対策で、同時に走らせる場合でもちょっと高速化できるかもしれません。

投稿日時 - 2005-06-18 19:09:00

お礼

お礼が遅くなって申し訳ありませんでした。しばらくぶりにGooを見て、お礼を差し上げていないことに気づきまして…

一応、問題は解決しました。
同時計算をさせて、2、3日後ぐらいに手動でウインドウを閉じるという作業を繰り返しました。

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

投稿日時 - 2005-11-20 01:29:41

ANo.4

今回のケースでは、ロケットマウスが使えそうです。

投稿日時 - 2005-06-17 09:31:39

お礼

ロケットマウスですか?初めて聞きました。

ちょっと調べてみて使ってみようと思います。
回答ありがとうございました。

投稿日時 - 2005-06-17 15:20:49

ANo.2

そのプログラムがどの様なものかわからないのですが、Dosアプリで「計算終了=プログラムの終了」という作りであるならば、そのEXEファイルのプロパティで「終了時にウィンドウを閉じる」としてもだめでしょうか?

投稿日時 - 2005-06-06 13:22:17

お礼

お礼が遅くなって申し訳ありません。
プロパティに「終了時にウィンドウを閉じる」というのがあればすべて解決できるのですが、残念ながらありませんでした。
ただ、「計算終了=プログラムの終了」は認識されているようです。Execute Window の左下には「実行中」ないし「終了」の文字が書かれていて、計算が終了するとCPU稼働率が100%から数%まで落ちますので。

うーん。難しいです。回答ありがとうございました。


あと、この欄に書かせていただくのは申し訳ないとは存じますが、No.1の方へのお礼の冒頭で「回答が遅くなって」というのを「お礼が遅くなって」と訂正させていただきます。すいませんでした。

投稿日時 - 2005-06-17 15:14:45

ANo.1

実行するexeは、ウインドウアプリケーションなのですか?
exeの方に手を加えるわけにはいかないのですか?

投稿日時 - 2005-06-06 13:00:35

お礼

回答が遅くなって申し訳ありません。
さすがにexeファイルをいじるリスクは負いたくないので…

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

投稿日時 - 2005-06-17 15:05:32

あなたにオススメの質問