在批处理文件中启动多个进程

时间:2017-09-04 04:32:03

标签: batch-file cmd

我的目标是根据给定计算机上的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% )

1 个答案:

答案 0 :(得分: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并不能保证已启动的程序在逻辑处理器上分发。阅读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