• ベストアンサー

.bat の同時起動を回避したい。

dscriptyの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.4

深呼吸を50回ぐらいして、そのあと読んでみて! ひとまず、補足質問の回答からだよ。 補足質問(1)の回答 「[テスト.bat] を [排他処理.bat]」 ではなくて、 「[テスト.bat]」を「[排他処理.bat]」にドラッグ&ドロップする。 補足質問(2)の回答 下のように、テスト.bat を引数として 排他処理.bat を実行すると、Call %* の部分で、テスト.bat が呼び出されるよ。 排他処理.bat テスト.bat 補足質問(3)の回答 排他処理.bat から テスト.bat を実行するんだから、テスト.bat から排他処理.bat を実行しないよ。 ここからは、感だけど > 同時実行を回避するだけにして、他の処理待ちにはできないんです。 この一行にすごく違和感があるから、どこか言葉の定義に食い違いがあるのかなと思って考えてみたよ。 何の断りもなく、「複数のバッチファイル」で「同時実行」を「回避したい」と言ったときは、下の様な意味だととらえるよ。 バッチファイルAが開始されたら、終了するまでは、他のバッチファイルの実行を回避したい。 バッチファイルAが終わったら、ようやくバッチファイルBが開始できる。 バッチファイルCはバッチファイルBの終了をまってようやく開始できる。 A開始→→→→→→終了    B待機→→→→→開始→終了      C待機→→→→→→→→開始→→→終了 もしかすると、「開始が同時になるのを回避したい」という意味かな? A開始→→→→→→終了 B開始→終了 C開始→→→終了 は、避けたいけど、 A開始→→→→→→終了    B開始→終了       C開始→→→終了 なら OK ということ? もし、この意味だとすると、5つのバッチファイルの中身を確認して、排他処理をする必要がある部分を特定しないと的確な回答はだせないとおもうな。

takatai
質問者

補足

ご回答ありがとうございます。深呼吸して、少し冷静になれました。 ありがとうございます。 5個のBatファイルの同時刻実行だけを回避したいのです。 「他が処理中なら待つ」ではなく、「他との起動時間だけをずらしたい」といったところでしょうか。 同時実行だけを回避したいので、5個のファイルから排他制御用を呼ぶ別のファイルを作成する。 排他制御用ファイルには、切り替えスイッチのように時間をずらして実行できるように なるといいと考えています。 ですので、最初に回答いただいた内容の排他制御において、5個のBatファイルの起動を切り替えるようなSwitch形式がいいかなと思い始めました。 >もしかすると、「開始が同時になるのを回避したい」という意味かな? >A開始→→→→→→終了 >B開始→終了 >C開始→→→終了 >は、避けたいけど、 >A開始→→→→→→終了 >   B開始→終了 >      C開始→→→終了 >なら OK ということ? >もし、この意味だとすると、5つのバッチファイルの中身を確認して、排他処理をする必要がある部分を特定しないと的確な回答はだせないとおもうな。 この「開始が同時になるのを回避したい」という意味になります。 排他制御で、Switchの形式で、A~Eの切り替えれるようにできればOKです。 5つのBatファイルから、排他制御.batを呼び出して、順番に5つのBatファイルを実行するようにするといいのでしょうか? そんなことはできるのでしょうか?

関連するQ&A

  • .Batの同時実行回避について

    今までの説明のしかたが悪かったようですので、改めて投稿させていただきます。 Windows2008Server上の.Batプログラムで作成したジョブで問題がでています。 ジョブをコントロールしているジョブ管理ツールがあります。タスクマネージャとは別のソフトの運用管理ツールです。 このジョブ管理ツールで、ジョブの関係をコントロールしており、前のジョブが終わったら後続のジョブが起動するようになっています。 まず、前のジョブが終了したら、5個のジョブが起動するようにジョブ設計がされています。 この5個のジョブが同時刻で開始すると、1個のジョブだけ成功して、残りの4個が正常終了しないという状況になっています。 イメージとしては、下記のようなところです。 前の処理ZZの後処理に、下記5個のジョブがある。 前の処理ZZ→↓       A開始→→→→→→終了       B開始→終了       C開始→→→→→終了       D開始→→→→→→→→→終了       E開始→→→→終了 ジョブ管理ツールでは、前処理と後処理(AからE)の前後関係は作れますが、同時実行を回避することはできません。今回のAからEは、同時刻に開始するとジョブが正常終了しない形となっています。 ちなみに、AからEは、他の会社が作成したもので、できることなら変更を加えたくありません。また、その会社とは契約が切れていて、変更依頼できず、こちらで対応することになっています。 そこで、まず、次の対応しました。あまりやりたくなかったけれど、AからEの処理の先頭にtimeoutで5秒ずつずらす処理を埋め込みました。 しかし、AからEの処理には、ZZ以外に、それぞれ別の前処理がありました。そのそれぞれの前処理は処理時間が一定ではなく、いつ終了するのか分かりません。 そのため、timeoutで5秒ずつずらしても、AからEの処理開始が同時になる可能性があり、実際に同時に実行されることがあるのです。ありえないとは思いますが、発生しているのです。 ジョブの関係としては、次のイメージです。 ABEはtimeoutで5秒ずつずらすことで回避できるが、CDは回避できない。 前の処理ZZの後処理に、下記5個のジョブがある。 前の処理ZZ →→→→→↓  Aの前処理→→→終了 ⇒A開始→→→→終了   :この場合、ABEが同時開始  Bの前処理→終了   ⇒B開始→終了      :この場合、ABEが同時開始  Cの前処理→→→→→→→終了⇒C開始→終了  :この場合、CDが同時開始  Dの前処理→→→→→→→終了⇒D開始→→終了 :この場合、CDが同時開始  Eの前処理→→終了 ⇒E開始→→→→終了   :この場合、ABEが同時開始 この状況のため、AからEの処理に、同時起動を制御するプログラムを埋め込むことを考えていますが、どのようにコーディングしていくといいかわかりません。 今考えているのは、 AからEの処理の代わりに、AからEのジョブは、同じ排他制御プログラムを実行するように置き換える。 排他制御プログラムの中で、AからEのジョブを順番に実行するように切り替えるようして、開始時間を切り替えるのは、どうかなと思っています。 (変更後のイメージ) Aのジョブを排他制御プログラム実行置き換える。 Bのジョブを排他制御プログラム実行置き換える。 Cのジョブを排他制御プログラム実行置き換える。 Dのジョブを排他制御プログラム実行置き換える。 Eのジョブを排他制御プログラム実行置き換える。 排他制御プログラムでは、順番に、A~Eのプログラムを時間をずらして実行する。 ただ、この排他制御プログラム、AからEの処理を置き換える実行プログラムも作成できないスキルです。 この方法でいいのかも検討がついていない状態です。 なにとぞ、ソースプログラムを教えていただきたいところです。 とっくに締め切りが過ぎている問題ですので、大至急でお助けをお願いしたいです。

  • BATファイル起動について

    お世話になっております。 javaのclassを実行する 以下の処理を行うbatファイルを作成したところ (ディレクトリ移動→classpathの設定→javaコマンド) cmd.exeよりこのbatファイルを実行すると 正常に動作してくれるのですが batファイルをダブルクリックすると javaを正常に実行しません。 errorや例外も特に発生していません。 batファイルを cmd.exeからの実行するのと ダブルクリックで実行するのには 何か違いがあるのでしょうか? よろしくお願いします。

  • BATファイルの終了

    BATファイルを実行し、 オンラインプログラムを起動していますが、 そのオンラインプログラムが終了しなくても、 起動したBATのコマンドプロンプトを終了させる 方法を教えてください オンラインの起動中に黒のプロンプトが残った ままになっているのが不便ですので

  • BATファイル実行にフォーカスを当てたい

    Windows2008サーバにRDPでWindows7から実行しています。 サーバにBATファイルを作成し、(XCOPYコマンド)データのバックアップを行います。 この時ですが、クライアント(Windows7)で実行させたBATファイルですが(コマンドプロンプト)画面が なぜか背面にかくれてしまい、BATの実行内容がみれなくなることがあります。また、BATの終了時に、正常終了かどうかの表示を行い、Pauseコマンドで止めていますが、これが、背面にかくれてしまい、いつ終ったのかわからない状態です。ずーっとBAT自動されたコマンドプロンプトの表示にフォーカスを当てたいのですが、BATに記述することにより、再度フォーカスを取り戻すようなコマンドはあるでしょうか?よろしくお願いします。

  • batよりjava起動

    お世話になっております。 javaのclassを実行する 以下の処理を行うbatファイルを作成したところ (ディレクトリ移動→classpathの設定→javaコマンド) cmd.exeよりこのbatファイルを実行すると 正常に動作してくれるのですが batファイルをダブルクリックすると javaを正常に実行しません。 errorや例外も特に発生していません。 batファイルを cmd.exeからの実行するのと ダブルクリックで実行するのには 何か違いがあるのでしょうか? 最終的な目的はタスクにこのbatを登録し 指定した時間に定期的に実行する事なのですが、 タスクにbatを登録して実行した場合 batをダブルクリックした時と同様の現象になり 正常に動作しませんでした。 原因をご存知の方がいらっしゃいましたら 教えて頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • batでchromeを起動・終了させたい

    batでchromeを起動終了させたいのですが、 start C:\Program Files (x86)\Google\Chrome\Application\chrome.exe を実行後 batが止まってしまいます。 このまま(もしくはchrome.exeをtaskkill)で次の処理にすすめたいのですが、いい方法ありませんか?

  • batファイルの強制終了を回避したい

    batファイルを作成する際、 batファイルに書かれた処理が終わると、batファイルは終了してしまいますが、それを回避したいです。 例えば、カレントディレクトリをE:\work_folderにして作業をしたいときに、 cd E:\work_folder; とだけ記述されているbatファイルを作ったら、 ディレクトリを変更したらそのまま終了してしまって、 作業を続けられませんし、 また、 cd E:\work_folder; pause; と記述したら、『続行するには何かキーを押してください . . .』 のメッセージの後、何かのキーを押した後に、結局DOSプロンプトは閉じてしまいます。 継続してコマンドを打ちたいのですが不可能でしょうか?? 宜しくお願いします。

  • Windows95のBATファイル実行

    皆様是非、御教授ください。 Windows95にてBatファイルを作成しました。 複数の実行(EXE)プログラムが起動するように したのですが、起動すると実行が完了しない状態で 次のプログラムが走ってしまいます。 WindowsNT上のように実行完了した後に次へ処理が 移る方法はないのでしょうか。 宜しく、お願い致します。

  • 複数のバッチを同時並行で起動したいNo2

    No.2002566で質問した者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2002566 環境:Windows2003Server バッチファイルの中に複数のバッチファイルを呼んでいるのですが、同時並行で実行することは可能でしょうか? サーバにCPUが4つあるのですが一回の実行ではタスクが分散されず1CPUで負荷がかかってしまって対応方法を考えています。複数のバッチに分けてから同時に実行した場合はタスクも複数になる為、処理が分散されるのではないかと思っているのですが・・・。 ↑ 現在「start C:\xxx\yyy.bat」コマンドで4つ同時並行で実行しておりタスクが分散されて負荷が軽減されています。 が、また問題が発生してしまいました。。 JP1で登録されているのですが上記バッチが終了していないのにもかかわらず次の登録バッチが実行されてしまいます。 対応としては4つのバッチのうち処理が一番重いバッチを「call」で呼ぶことにしています。 理想としては全てのバッチが終了したら親元のバッチを終了させるようにしたいのですが・・。 何かいい方法があればアドバイスお願い致します。

  • バッチファイルを1個だけしか起動しないようにしたい

    エクスプローラー上から バッチファイル(test.bat)を ダブルクリックしてバッチファイルを実行しています。 通常はコマンドプロンプトが1個だけ表示されて、 バッチファイルが実行して実行が終了すると コマンドプロンプトも閉じられます。 しかし、時々、 コマンドプロンプトが2個表示されることがあります。 つまり、ダブルクリックが、 1回ではなく2回実行されたと誤認識されて、 同じバッチファイル(test.bat)が 2つ起動してしまったと思われます。 当然、その後の処理はおかしくなります。 (バッチファイル(test.bat)の中に 何らかのコードを追加するなどして) 必ず1個だけしか起動しないようにすることは、 できないでしょうか。 (Windows10)