質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

359閲覧

バッチでの並行処理について

uni_chi_

総合スコア16

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2023/08/23 04:28

編集2023/08/23 05:33

実現したいこと

バッチ(ms-dos)を使用して開発しています。
表題の通り、複数のバッチファイルをそれぞれ設けた時間を計測してて並行処理したいです。

前提

具体的には、A.bat(呼び出し元),B.bat(呼び出し先)の二つのファイルがあるとして、
・A.batの処理は5秒ごと処理を実行
・B.batの処理はA.batの処理を止めずに10秒ごとに処理を実行
としたいです。

未経験のため、拙いところが多々あり申し訳ございません。
上記ご教示いただければと存じます。
宜しくお願い致します。

該当のソースコード

A.batファイルの処理↓
@echo off

:START

echo 処理実行

remB.batファイルの処理は10秒待って処理実行。その間A.batの処理は止めないこととする。
start timeout /T 10 /NOBREAK call B.bat

rem A.batファイルの処理は5秒待つ
timeout /T 5 /NOBREAK

goto START

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

処理Bを5秒ごとに起動したい。
実際に処理Bを始めるのは10秒遅らせたい。
というのがやりたいことであれば、お書きのコードで下記だけ修正すれば良いです。
だだし、処理のオーバーヘッドがあるので、正確に5秒ではなく「5秒とちょっと」ですが。

CMD

1start timeout /T 10 /NOBREAK call B.bat 23start cmd /c "timeout /T 10 /NOBREAK & call B.bat"

・A.batの処理は5秒ごと処理を実行
・B.batの処理はA.batの処理を止めずに10秒ごとに処理を実行

だと内容が不明です。
「A.batの処理」とは?「Bの起動」のみ?あるいは他にもある?
「10秒ごとに処理を実行」と、お書きのコードの「Aから起動されて10秒待って処理」との関係は?
など。

追記

timeoutコマンドだと1秒未満待つことは出来ないですが、他の手段で1秒未満待てばこういう手もありますね。
(手元の環境だとSleep 200をcscriptコマンドで起動すると0.3秒くらい待ちます)
Aの処理を5秒ごとに実行したいと言う以上、Aの処理が5秒を超えることは死んでもあり得ないのでしょうが、5秒ぎりぎりになると厳しいですね。その場合は、コメントに書いたような方法しか無いでしょう。

現在時刻の秒の1の位が0ならB.BATを起動して、5で割った余りが0ならAの処理をする。
「N秒ごとに」のNが60の約数なら同様に出来ます。

CMD

1@echo off 2echo WScript.Sleep 200 > $$$.vbs 3 4:MAINLOOP 5set S=%TIME:~7,1% 6if %S%==0 start B.BAT 7set /a S5=S %% 5 8if %S5%==0 call :AAAAA 9:SAMESECOND 10cscript $$$.vbs 11if %S%==%TIME:~7,1% goto SAMESECOND 12goto MAINLOOP1 13 14:AAAAA 15A固有の処理

投稿2023/08/23 05:02

編集2023/08/23 15:25
otn

総合スコア86295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uni_chi_

2023/08/23 05:46

ご回答ありがとうございます。 A.batの処理とは質問元のソースコードが書いてあるファイル名であり、 ソースコードが書いてあるファイルとは別にA.bat,B.batファイルがそれぞれ存在しているという意味ではありません。 また、実行したい処理の内容としては ①A.batファイルの処理(質問元のソースコードファイル)を5秒ごとに実行 ②①の処理を止めずに10秒経過するごとにB.batファイルの処理を呼び出し実行 としたいです。 頂いたソースコードでは期待した結果が得られませんでした。 私の知識不足で意味が伝わらず申し訳ございません。。 再度ご教示ください。。
otn

2023/08/23 06:14

> 「A.batの処理」とは?「Bの起動」のみ?あるいは他にもある? については、他にはなくてBの起動のみと言うことですかね?YES or NO? > 「10秒ごとに処理を実行」と、お書きのコードの「Aから起動されて10秒待って処理」との関係は? についてはどうなのでしょうか? 「10秒ごとに処理を実行」を普通に解釈すると、10秒ごとの起動なのですが、AからBの起動は5秒ごとになっているので矛盾しているように見えるので聞いています。 > 頂いたソースコードでは期待した結果が得られませんでした。 どういう結果を期待して、実際にはどういう結果だったでしょうか?具体的に書きましょう。具体的にです。
uni_chi_

2023/08/23 06:50

> 「A.batの処理」とは?「Bの起動」のみ?あるいは他にもある? > については、他にはなくてBの起動のみと言うことですかね?YES or NO? NOです。A.batの処理は ①5秒ごとに「処理実行」を出力 ②「B.batファイルを呼び出す」 の2点です。今回、①を5秒ごとに処理実行し、②を①の処理を止めずに10秒ごとに呼び出したいです。 > 「10秒ごとに処理を実行」と、お書きのコードの「Aから起動されて10秒待って処理」との関係は? > についてはどうなのでしょうか? > 「10秒ごとに処理を実行」を普通に解釈すると、10秒ごとの起動なのですが、AからBの起動は5秒ごとにな > っているので矛盾しているように見えるので聞いています。 ・AからBの起動は5秒ごとになっている こちらについては私のコーディングミスであり、実際にやりたいこととしては ・「10秒ごとに処理を実行」を普通に解釈すると、10秒ごとの起動 こちらの認識で合っています。 > 頂いたソースコードでは期待した結果が得られませんでした。 > どういう結果を期待して、実際にはどういう結果だったでしょうか?具体的に書きましょう。具体的にです。 5秒ごとにB.batファイルが呼び出されてしまい、 期待した結果 ・A.batファイルにて5秒ごとに「処理実行」を出力 ・B.batファイルを10秒ごとに呼び出す が得られませんでした。 言いたいこと、イメージしていることが上手く伝わらず申し訳ございません。。
otn

2023/08/23 08:48

Aが、A固有の処理をしつつ、一定時間毎に他の処理Bを起動するというのはそもそも発想に無理があるでしょう。 やりたいことを実現するには、X.BATを作って、 5秒ごとにA.BAT(今のA.BAT処理からB.BAT起動を削除)を起動 10秒ごとにB.BATを起動 というのが簡単でしょうね。もちろん、それぞれ約5秒、約10秒になりますが。
uni_chi_

2023/08/24 00:27

ご回答ありがとうございます! 2つのファイルで実現したかったのですがそれは難しいのですね、、
otn

2023/08/24 01:03

Aの処理がすぐ終わるなら、追記の方法もあります。
sazi

2023/08/24 06:51

横から失礼します。 > 2つのファイルで実現したかったのですがそれは難しいのですね 再帰的な呼び出しをすれば別に一つのファイルでも出来ると思いますけど、処理が複雑になる事に対するメリットがあるようには思えません。
otn

2023/08/24 08:36

そうですね。 念のために解説しておくと、 複数の異なる機能を持った複数のコードを1ファイルに順番に並べて書いて、 先頭で、引数などによりどの機能を実行するのか判断して分岐します。 異なる機能を持つ複数の処理を1ファイルにまとめることが出来ますので、 X A B という3つの処理を2つのファイルでも、1つのファイルでも可能です。 他人に配布するスクリプトファイルだとむりやり1つにする事はありますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問