Batch file 在批处理文件中启动多个进程
我的目标是根据给定机器上的cpu核数在批处理文件中启动多个进程。我想出了下面的脚本,它似乎工作得很好,但不确定这是否是做它的最佳方式Batch file 在批处理文件中启动多个进程,batch-file,cmd,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
@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% )
有一种误解,环境变量
NUMBER\u OF_PROCESSORS
表示处理器的逻辑数量,它不是cpu插槽的数量,而是最终使用HT/SMT时内核的数量翻倍
请参阅此wmic命令的输出
> wmic cpu get NumberOfCores,NumberOfEnabledCore,NumberOfLogicalProcessors /value
NumberOfCores=4
NumberOfEnabledCore=4
NumberOfLogicalProcessors=8
经常使用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
操作系统默认自动设置变量
处理器的数量。@Magoo内核的数量不一定与处理器的数量相同。例如,在我的笔记本电脑上,我有一个处理器,但有两个内核。有没有一种方法可以将核心数的值直接分配给脚本变量?目前,我正在使用“set str=%str:NumberOfCores=%”,这似乎有点像黑客。请参阅更改的答案。在nanoserver上使用find命令执行上述脚本时,错误“find”未被识别为内部或外部命令,可操作程序或批处理文件.find.exe应位于C:\Windows\System32\find.exe
中,另一种选择是findstr.exe我需要的是内核数量,而不是逻辑处理器(正如我在原始帖子中提到的)。将find替换为findstr后,上面的脚本给出了“numberofprocessors=2”,但我需要的是“NumberOfCores=1”(测试机器上的情况是1个cpu内核和2个逻辑处理器)