异步运行Windows批处理文件命令

时间:2009-09-19 18:34:55

标签: batch-file cmd

说,如果我有

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

如何异步运行批处理文件中的所有文件,即无需等待以前的程序停止?

7 个答案:

答案 0 :(得分:232)

使用START命令运行每个程序应该可以满足您的需求:

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

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

这适用于命令行应用程序。没有命令行的应用程序无论如何都会立即返回,所以可以肯定的是,如果要异步运行所有应用程序,请使用START

答案 1 :(得分:62)

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

对于一个简单的例子,如果你想打印出java / groovy / 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

答案 2 :(得分:35)

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

start /b foo.exe

使用CTRL-C不会中断新进程;你只能用CTRL-BREAK(或通过关闭窗口,或通过任务管理器)来杀死它。)

答案 3 :(得分:21)

使用以下行创建批处理文件:

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

start command在新窗口中运行您的命令,因此所有3个命令都将异步运行。

答案 4 :(得分:16)

使用START command

start [programPath]

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

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

如果你需要提供参数,请在末尾添加它们(在命令引号之外)

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

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

答案 5 :(得分:10)

还有第三种(可能更容易)的选择。如果你想要启动单个程序的多个实例,使用像Xargs或GNU Parallel这样的Unix式命令处理器可以使这个过程相当简单。

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

例如,如果要转码视频文件目录,可以运行命令:

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的输入中。

答案 6 :(得分:-1)

我什么都做不了,我最终只是使用powershell来启动bat脚本。 >

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden