如何并行运行多个.cmd文件

如何并行运行多个.cmd文件,cmd,parallel-processing,Cmd,Parallel Processing,我有4个.cmd文件。我想并行运行,每次运行2次。 假设我的文件是:1.cmd,2.cmd,3.cmd,4.cmd 我想并行运行1.cmd和2.cmd。现在,当这些结束时,我想运行3.cmd,然后运行4.cmd。简而言之,在任何给定时间,我都希望运行2个.cmd文件 我正在使用Start命令进行并行执行。但是我对脚本编写还不熟悉,我对如何编写上面提到的运行cmd文件的方法感到困惑 任何帮助都将不胜感激 谢谢 Debjani我还没有尝试过这个,但我想你可以用PowerShell来做。使用这种类型的

我有4个.cmd文件。我想并行运行,每次运行2次。 假设我的文件是:1.cmd,2.cmd,3.cmd,4.cmd

我想并行运行1.cmd和2.cmd。现在,当这些结束时,我想运行3.cmd,然后运行4.cmd。简而言之,在任何给定时间,我都希望运行2个.cmd文件

我正在使用Start命令进行并行执行。但是我对脚本编写还不熟悉,我对如何编写上面提到的运行cmd文件的方法感到困惑

任何帮助都将不胜感激

谢谢
Debjani

我还没有尝试过这个,但我想你可以用PowerShell来做。使用这种类型的结构:

在本例中,您应该能够执行cmd/bat文件

查看下面的线程,了解一些想法(可能重复?)

我曾经给出过一个答案,这里引用:

听起来更像是你想用的 Powershell 2。然而,你可以繁殖 新建
cmd
windows(或其他进程) 使用
start
,另请参见此 回答。虽然你可能不得不这么做 使用其他一些工具和一些工具 用诡计来创造一个像 “进程池”(只有最大值) 一次运行n个实例中的一个)。 您可以通过使用
tasklist/im
并计算有多少 是否已存在(
用于循环或
wc
), 如果适用),只需等待(
ping)
-n 2::1>nul 2>&1
),然后再次检查是否可以生成新的 过程

我拼凑了一个小测验 此项的批处理:

@echo off
for /l %%i in (1,1,20) do call :loop %%i
goto :eof

:loop
call :checkinstances
if %INSTANCES% LSS 5 (
    rem just a dummy program that waits instead of doing useful stuff
    rem but suffices for now
    echo Starting processing instance for %1
    start /min wait.exe 5 sec
    goto :eof
)
rem wait a second, can be adjusted with -w (-n 2 because the first ping
立即返回; 否则,只需使用未使用的地址和-n 1) echo正在等待实例关闭。。。 ping-n2::1>nul2>&1 rem跳回去看看我们现在是否可以产生一个新的进程 转到环路 后藤:eof

:checkinstances
rem this could probably be done better. But INSTANCES should contain
正在运行的实例数 之后 对于(
tasklist/fo csv/fi)imagename eq中的/f“usebackq”%%t
wait.exe“^ wc-l
)是否设置 实例=%%t 后藤:eof

:checkinstances
rem this could probably be done better. But INSTANCES should contain
它最多生成四个新的 并行执行的进程和 最小化。等待时间需要延长 可能会调整,取决于如何调整 每个过程有多少作用,需要多长时间 他正在跑步。你可能还需要 调整所需的进程名称 任务列表正在查看您是否正在执行 还有别的

没有办法正确地计算出总数 由此产生的进程 不过是批量生产。一种方法是 在开始时创建一个随机数 批处理(
%RANDOM%
)并创建 执行处理的帮助程序批处理 (或生成处理程序)但是 可以将其窗口标题设置为 参数:

@echo off
title %1
"%2" "%3"
这将是一个简单的批处理 它的标题是第一个参数和 然后使用 第三个作为论据。那么你可以 仅通过选择在任务列表中进行筛选 具有指定窗口的进程 标题(
tasklist/fi“windowtitle eq
…”
)。这应该是公平的 可靠,防止出现过多的错误 肯定的。搜索
cmd.exe
如果你还活着那就不是个好主意了 某些实例正在运行,因为这限制了 您的工作进程池

您可以使用
%NUMBER\u处理器%
创建一个合理的默认值 许多实例需要生成

您还可以轻松地将其调整为使用
psexec
生成进程 远程(但不太可行) 因为你必须有管理员权限 在另一台机器上以及 在批处理中提供密码)。 您必须使用进程名称 不过,用于过滤


像往常一样,我推荐Cygwin做任何事。