
こんにちは、皆さんの知恵を貸してください。
自分はプログラムとかコマンドプロンプトなどはまったくの初心者ですが、研究で必要に迫られて現在勉強中・修行中の大学院生です。
OSはウインドウズXPです。コマンドプロンプトを起動して、とある計算コードを走らせます。計算時間が10時間弱かかるので連続計算させる為にバッチファイルを作ることにしました。
作製してみたところ、コードのexeファイルが起動すると新しいウインドウができてそこで実行されます。そしてそのウインドウを閉じないとバッチファイルに記述した次のファイルが読み込まれません。
週末とか、深夜とかにPCの前にいなくても計算を走らせる為に組んだバッチですが、手動でウインドウを消すのであればまったく無意味です。
ここで質問が2つあります。
1.計算が終了した、と認識させるにはどういう手段があるでしょう?
2.計算が終了したらそのファイル(ウインドウ)を閉じるようなコマンドって存在しますか?
1で計算終了を判断し、2でそのウインドウを削除する事ができれば次の計算が走るようになると思うのですが…
IFとかCALLとか考えてみたのですが、どうにもわからずパニックに陥っててます。どうか皆さん、よろしくお願いします。
(;_;)
No.3ベストアンサー
- 回答日時:
問題を整理してみましょう。
現在実現したいことは、こういうことでよろしいでしょうか。
1.計算時間が10時間程度かかるEXE形式の実行ファイルがある。
2.それをバッチファイルから、順次呼び出し、最後まで勝手に動かしたい。
これを実現するためには、いくつか確認すべきことがあります。
まず、大前提として、そのEXEのプログラムは自分を終了させる方法をもたないのでしょうか?
それがいわゆるGUIアプリケーションで、終了ボタンや右肩のXボタンを押さなければ終了できないというのであれば、そもそもバッチファイルから連続稼動はあきらめるしかありません。できないものはできないのです。
そのEXEが、どういった出自のものかわかりませんが、例えば起動時にオプションを渡すことで、計算終了後に自動的に終了するとか、そういった機能があれば、問題ありませんが、そうでないならバッチファイルから制御するのは、あきらめて別の方策を考えるほうが無難です。
バッチファイルは、自ら終了しないプログラムに対して、何か制御をするような機能は有していません。
また、計算が終了したことを知る方法も、そのEXEが提供していないのならば、ありません。
しかし、例えば以下のような条件を満たすのであれば、別の方法が可能かもしれません。バッチファイルよりは敷居が高いですけど。
A.少なくともマウスを使わず、キーボードだけの操作で終了が可能である。
B.起動すると、ウインドウのタイトルバーにアプリ名等が表示される。
C.計算終了した旨が、やはりウインドウのタイトルバーに表示される。
WSH上で、JScriptやVBScriptを組み合わせてコーディングすれば、起動されたタイトルバーの文字列からウインドウを特定し、そこに対してキー入力を送ることができます。
まあ、仮にA.の条件が満たせなかった場合、マウスイベントを送り込めるフリーウェアもいくつかあるので、そういったものを使う方法もありますが・・・。
いずれにしても、この無理やりな方法を実現するためには、B.やC.の方法は必須でしょう。
現在わかるところから言えるのは、このくらいですね。
もう少し、そのEXE自体の仕様がわかれば別の対処もあるかもしれませんけど、問題の根幹は、そのEXE自体の仕様だという認識をもってください。
以上 参考までに。
御礼が遅くなって申し訳ありませんでした。
やはりバッチファイルからの制御は無理っぽいですね。列挙されたABCのうち、Aはムリっぽいです。BとCは表示されていると思います。
ただ、ウインドウをたくさん開くことで処理速度は遅くなりますが、同時計算が可能ということがわかりましたので休日や連休などはその方法で何とか計算できるようになりました。
回答ありがとうございました。
No.5
- 回答日時:
プログラムがきちんと終了していないのが原因だと思います。
計算が終わった後にプログラムが何をしているか分かりませんけど、空ループか、データ入力待ち等のアイドリングしてるんだと思います。人間としては計算終了はどうやって判定していますか?タイトルに終了メッセージがでるのでしょうか?Windowsの中にメッセージが出るのでしょうか?ファイルが出力されるとかで計算終了が分かるのでしょうか?
まさかCPU占有率が0%になるから、終わったと判定してるということはないと思いますが・・
>計算が終了するとCPU稼働率が100%から数%まで落ちます
これはプログラムが終了していなくても、こういう結果になる場合があります。
同時に走らせることが可能ならば、リレーはアバウトでも大丈夫そうですね。9時間位ずつずらして、Windowsのタスクで走らせるなどの対策で、同時に走らせる場合でもちょっと高速化できるかもしれません。
お礼が遅くなって申し訳ありませんでした。しばらくぶりにGooを見て、お礼を差し上げていないことに気づきまして…
一応、問題は解決しました。
同時計算をさせて、2、3日後ぐらいに手動でウインドウを閉じるという作業を繰り返しました。
回答ありがとうございました!
No.4
- 回答日時:
今回のケースでは、ロケットマウスが使えそうです。

No.2
- 回答日時:
そのプログラムがどの様なものかわからないのですが、Dosアプリで「計算終了=プログラムの終了」という作りであるならば、そのEXEフ
ァイルのプロパティで「終了時にウィンドウを閉じる」としてもだめでしょうか?お礼が遅くなって申し訳ありません。
プロパティに「終了時にウィンドウを閉じる」というのがあればすべて解決できるのですが、残念ながらありませんでした。
ただ、「計算終了=プログラムの終了」は認識されているようです。Execute Window の左下には「実行中」ないし「終了」の文字が書かれていて、計算が終了するとCPU稼働率が100%から数%まで落ちますので。
うーん。難しいです。回答ありがとうございました。
あと、この欄に書かせていただくのは申し訳ないとは存じますが、No.1の方へのお礼の冒頭で「回答が遅くなって」というのを「お礼が遅くなって」と訂正させていただきます。すいませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAで関数をつくる
-
引き放し法による除算アルゴリ...
-
変化させるセルが変化しない
-
傾いた四角形内の範囲の条件式
-
趣味で「乗換案内」みたいなソ...
-
matlabで計算終了
-
加速度から変位の変換について
-
CRC8を教えてください
-
階乗のマクロ
-
モジュラス103の計算とは何でし...
-
排他的論理和 BCC(水平パリテ...
-
エクセルのセル式で恐縮ですが...
-
ReportViewerのテキストボック...
-
パソコン
-
VBA入力フォームで労働時間の計...
-
VB6で 1-0.1*10 の計算結果が...
-
EXCELなどで「返す」という表現
-
構文解析を利用した計算プログ...
-
正しい五十音順について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAで関数をつくる
-
VBAの再計算が反映されない件に...
-
EXCELなどで「返す」という表現
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
変化させるセルが変化しない
-
引き放し法による除算アルゴリ...
-
モジュラス103の計算とは何でし...
-
C言語についてです。 再帰を使...
-
スレッド処理からダイアログを...
-
階乗のマクロ
-
Perlで時間の計算
-
エクセルで特定のセルのみを任...
-
傾いた四角形内の範囲の条件式
-
モジュロ
-
VBA入力フォームで労働時間の計...
-
三菱シーケンサー works2 の日...
-
Java 電卓の連続計算
-
パソコン
おすすめ情報