0

ここでの質問の短いバージョン、

バッチ ファイルから実行可能ファイルを実行します (これにより、シミュレーションが実行されます)。一度に最大 4 つまで実行できます。これらの実行可能ファイルが一度にいくつ実行されているかを (バッチ ファイルから) チェックする方法はありますか?

ロングバージョン、

複数のモデルを実行できるバッチ ファイルがありますが、ライセンスの関係で 4 つ以上のモデルを同時に実行することはできません。ただし、それらを実行するためにキューに入れることはできますが、常に4つのモデルが常に実行されるようにするバッチファイルを作成するのに苦労しています。私の最善の努力(インターネットを検索してまとめたもの)は以下のとおりです

            FOR %%a in (%A%) do (
                FOR %%b in (%B%) DO (
                    FOR %%c in (%C%) DO (
                         FOR %%d in (%D%) DO (
                            SET /A COUNT+=1
                            SET /A Result =!COUNT!%%4
                            :: set Result to the remainder of the Count divided by 4
                            if !Result! == 0 (
                                start "TUFLOW" /wait C:\Tuflow\TuflowExe\Build_2011_09_AF_64\TUFLOW_iSP_w64.exe -e1 %%a -s1 %%b -s2 %%c -s3 %%d C:\Tuflow\Model\Ohoka\runs\OH.tcf
                            ) else (
                                start "TUFLOW" C:\Tuflow\TuflowExe\Build_2011_09_AF_64\TUFLOW_iSP_w64.exe -e1 %%a -s1 %%b -s2 %%c -s3 %%d C:\Tuflow\Model\Ohoka\runs\OH.tcf
                            )
                         )
                    )
                )
            )

A、B、C、および D は、実行可能ファイルに渡される変数の組み合わせを含む配列です。次に、反復を記録するカウントがあり、4 回の反復ごとに if ステートメントの「True」条件がトリガーされ、バッチはモデルの実行が完了するまで待機してから続行します。

これは問題ありませんが、他の 3 つのモデルがより早く終了する可能性があり、バッチが 4 回目の反復の完了を待っているために使用されていない貴重な CPU 時間が解放されます。さらに悪いことに、4 回目の繰り返しが他の 3 回よりも前に完了し、最終的に 4 つを超えるモデルを実行しようとすることになり、ライセンス ポップアップが表示され、ユーザーが閉じる必要があります。

私が見逃している提案やその他の解決策はありますか?

4

2 に答える 2

2

を使用して、実行中のプログラムの数を数えるのは比較的簡単です。tasklist.exe

for /f "skip=3" %%x in ('tasklist /FI "IMAGENAME eq TUFLOW_iSP_w64.exe"') do set /a count=count+1
echo TUFLOW_iSP_w64.exe is running %count% times.

実行するたびにクリアcountまたは設定することを忘れないでください。0

または、もっとゆっくり:

for /f %%x in ('tasklist ^| find /c "TUFLOW_iSP_w64.exe"') set count=%%x
Echo TUFLOW_iSP_w64.exe is running %count% times.

上記のコードはfind、タスクリスト全体を処理する必要があるため遅くなります。

于 2012-09-06T02:05:07.503 に答える
1

数秒ごとに実行されるポーリングループを試してみます

tasklist | findstr "TUFLOW"

出力の行数を取得し、その数が4未満の場合は、新しい実行を開始します。

複雑なバッチファイルの作成に問題はないようですので、ここではコーディングを試みません。コマンド出力の行数を数えることは、で行うことができますFOR /F。ポーリングの遅延にはsleep実装が必要です。たとえばCygwinがインストールされている場合は、すでにこれがインストールされています。ほとんどのWindowsバージョンには、文書化されていないコマンドがあります。これについては、この記事でtimeout NumberOfSeconds学びました。

于 2012-09-06T01:54:13.640 に答える