asynchronous运行Windowsbatch file命令

说,如果我有

  • foo.exe的
  • bar.exe
  • baz.exe

我如何从一个batch file中asynchronous运行它们,即不等待之前的程序停止?

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

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

每个START调用运行参数中给出的命令,并立即返回,除非用/WAIT开关执行。

这适用于命令行应用程序。 没有命令行的应用程序无论如何都会立即返回,因此,如果要asynchronous运行所有应用程序,请使用START

结合前面几个答案,你可以尝试start /b cmd /c foo.exe

对于一个简单的例子,如果你想打印出java / groovy / grails / gradle的版本,你可以在一个batch file中做到这一点:

 @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 

你可以使用start命令来产生后台进程而不用启动新的窗口:

start /b foo.exe

CTRL-C不会中断新进程; 您只能通过CTRL-BREAK(或通过closures窗口或通过任务pipe理器)来杀死它。

使用以下几行创build一个batch file:

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

start命令在新窗口中运行您的命令,所以所有3个命令将asynchronous运行。

使用START命令 :

 start [programPath] 

如果程序的path包含空格,请记住添加引号。 在这种情况下,您还需要提供打开控制台窗口的标题

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

如果你需要提供参数在最后(在命令引号之外)

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

使用/ b选项可避免打开新的控制台窗口(但在这种情况下,您不能使用CTRL-C中断应用程序

还有第三个(也可能更容易)选项。 如果你想旋转一个程序的多个实例,使用像Xargs或者GNU Parallel这样的Unix风格的命令处理器可以使这个过程非常简单。

有一个名为PPX2的win32 Xargs克隆使得这个过程非常简单。

例如,如果您想转码video文件的目录,则可以运行以下命令:

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

select这个分开, dir /b *.mpg抓取.mpg文件列表在我的当前目录中, | 运算符将该列表pipe理到ppx2中,然后构build一系列并行执行的命令; 每次4个,这里由-P 4操作员指定。 -L 1运算符告诉ppx2一次只发送一行目录列表到ffmpeg。

之后,您只需编写命令行( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4" ),并且{}会自动replace目录列表的每一行。

它不是普遍适用于每一种情况,但是比使用上面详述的batch file解决方法更容易一些。 当然,如果不处理文件列表,也可以将文本文件或任何其他程序的内容传送到pxx2的input中。