2017-09-04 2 views
0

私の目標は、特定のマシン上のCPUコアの数に基づいてバッチファイル内で複数のプロセスを開始することです。下のスクリプトはうまくいきましたが、これが最適な方法であるかどうかはわかりません。バッチファイルで複数のプロセスを開始する

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
set arg1=%1 

FOR /F "tokens=* USEBACKQ" %%F IN (`wmic cpu get NumberOfCores`) DO (
    SET str=%%F 
) 
set str=%str:NumberOfCores =% 
FOR /L %%n IN (1,1, %str%) DO (start %arg1%) 
+0

OSがデフォルトで自動的に変数 'NUMBER_OF_PROCESSORS'を設定します。start /? =>ノード、アフィニティ

@Echo off For /f %%A in ('wmic cpu get NumberOfCores /value^|find "="') Do Set /A %%A Set Num 

サンプル出力を読みます。 – Magoo

+0

@Magooコア数は必ずしもプロセッサ数と同じではありません。例えば、私のラップトップには1つのプロセッサーと2つのコアがあります。 – Razi

答えて

1

、環境変数NUMBER_OF_PROCESSORSがCPUソケットの数が、最終的にHT/SMTで倍増したコアの数ではないプロセッサの論理番号を表し、誤解があります。

はできるだけ頻繁NUMBER_OF_PROCESSORSが起動したプログラムは、論理プロセッサ上で配布されて保証するものではありませんとして開始使って、このWMICコマンドの出力に含ま

> wmic cpu get NumberOfCores,NumberOfEnabledCore,NumberOfLogicalProcessors /value 

NumberOfCores=4 
NumberOfEnabledCore=4 
NumberOfLogicalProcessors=8 

を参照してください。

NumberOfCores=4 
NUMBER_OF_PROCESSORS=8 
+0

コア数の値をスクリプト変数に直接割り当てることができる方法はありますか?現時点では、 "set str =%str:NumberOfCores =%"を使用しています。これはハックのようです。 – Razi

+0

採点された回答を参照してください。 – LotPings

+0

nanooserverでfindコマンドで上記のスクリプトを実行すると、 'find'エラーが内部または外部コマンドとして認識されません。 操作可能なプログラムまたはバッチファイルです。 – Razi

関連する問題