2017-09-04 47 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'自動地默認。 – Magoo

+0

@Magoo核心數量不一定與處理器數量相同。例如在我的筆記本電腦上,我有1個處理器,但有2個內核 – Razi

回答

1

有一種誤解,環境變量NUMBER_OF_PROCESSORS表示處理器的邏輯編號這是不CPU插座的數量,但最終與HT/SMT一倍核的數量。

看到這個WMIC命令

> wmic cpu get NumberOfCores,NumberOfEnabledCore,NumberOfLogicalProcessors /value 

NumberOfCores=4 
NumberOfEnabledCore=4 
NumberOfLogicalProcessors=8 

使用爲NUMBER_OF_PROCESSORS不保證啓動程序在邏輯處理器分佈式開始經常的輸出中。讀start /? =>節點,親和

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

示例輸出:

NumberOfCores=4 
NUMBER_OF_PROCESSORS=8 
+0

有沒有一種方法可以將核心數量的值直接分配給腳本變量?目前,我正在使用「set str =%str:NumberOfCores =%」,這看起來有點像黑客。 – Razi

+0

查看channged答案。 – LotPings

+0

使用nano命令執行上面的腳本時,獲取錯誤'find'不會被識別爲內部或外部命令, 可操作程序或批處理文件。 – Razi

相關問題