2017-09-04 46 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

相关问题