运行Windows批处理文件异步命令(Running Windows batch file comm

2019-07-18 14:56发布

再说了,如果我有

  • foo.exe`
  • bar.exe
  • baz.exe

如何运行所有的人都从一个批处理文件异步,即无需等待前一程序停止?

Answer 1:

使用START命令运行每个程序应该得到你所需要的:

START "title" [/D path] [options] "command" [parameters]

START调用运行在它的参数给出的命令,除非有执行立即返回, /WAIT开关。

这适用于命令行应用程序。 Apps,而无需立即命令行的回报无论如何,所以可以肯定的,如果你想所有的异步运行,使用START



Answer 2:

结合一对夫妇以前的答案,你可以尝试start /b cmd /c foo.exe

对于一个简单的例子,如果你想打印出来的Java /常规/ Grails的/ gradle产出的版本,你可以在一个批处理文件这样做:

@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version

如果您有类似的Process Explorer(Sysinternals的),你会看到几个孩子的cmd.exe进程每一个Java进程(按照上面的命令)。 输出将打印在任何为了他们完成的画面。

start /b :  Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application

cmd /c : Carries out the command specified by string and then terminates


Answer 3:

您可以使用start命令产卵后台进程,而无需启动新窗口:

start /b foo.exe

新工艺将不中断的用CTRL-C; 你只能用CTRL-BREAK杀死它(或关闭窗口,或通过任务管理器)。



Answer 4:

创建具有如下的批处理文件:

start foo.exe
start bar.exe
start baz.exe 

在启动命令在新窗口中运行你的命令,让所有3个命令将异步运行。



Answer 5:

使用START命令 :

start [programPath]

如果路径程序包含空格记得要加引号。 在这种情况下,你还需要提供开放的控制台窗口标题

start "[title]" "[program path]"

如果您需要提供的参数追加他们在最后(命令引号外)

start "[title]" "[program path]" [list of command args]

使用/ B选项,以避免打开一个新的控制台窗口(但在这种情况下,你不能中断使用Ctrl-C的应用



Answer 6:

还有第三个(可能更容易)选项。 如果要旋转起来的多个实例单个程序的,使用Unix风格命令处理器类似xargs的或GNU并行可以使一个相当简单的过程。

有一个名为Win32的xargs的克隆PPX2 ,使这个非常简单。

举例来说,如果你想转码的视频文件的目录,你可以运行下面的命令:

dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"

采摘这种分开, dir /b *.mpg抓住我的当前目录下的.MPG文件列表中, | 操作者管道该列表到PPX2,然后构建了一系列平行于要执行的命令; 4的时间,如在此通过指定-P 4算子。 该-L 1运营商告诉PPX2只发送我们的目录中的一个行上市在时间FFmpeg的。

在此之后,你只写你的命令行( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4" )和{}就会自动代替你的目录列表的每一行。

这不是普遍适用于所有情况,但比使用上面详述的批处理文件变通方法更容易了一大堆。 当然,如果你不处理的文件列表,你也可以管一个文本文件或任何其他程序到pxx2的输入的内容。



文章来源: Running Windows batch file commands asynchronously