Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理文件中启动多个进程_Batch File_Cmd - Fatal编程技术网

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

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

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

有一种误解,环境变量
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个逻辑处理器)