代码之家  ›  专栏  ›  技术社区  ›  RichN

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

  •  166
  • RichN  · 技术社区  · 15 年前

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

    如何从批处理文件异步运行所有这些程序,即不等待上一个程序停止?

    6 回复  |  直到 8 年前
        1
  •  270
  •   Peter Mortensen icecrime    8 年前

    使用 START

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

    每一个 开始 调用运行其参数中给定的命令并立即返回,除非使用 /WAIT 转换

    开始 .

        2
  •  69
  •   djKianoosh    12 年前

    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
    
        3
  •  38
  •   sproaticus    15 年前

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

    start /b foo.exe

    使用CTRL-C将无法中断新进程;您只能通过CTRL-BREAK(或通过关闭窗口,或通过任务管理器)终止它

        4
  •  25
  •   Nikhil    15 年前

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

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

        5
  •  18
  •   Salvioner datowlcs    6 年前

    使用 START command

    start [programPath]
    

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

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

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

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

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

        6
  •  11
  •   schmod    12 年前

    还有第三种选择(可能更容易)。如果您想加速单个程序的多个实例,使用Unix风格的命令处理器(如Xargs或GNU Parallel)可以使这一过程相当简单。

    有一个win32 Xargs克隆名为 PPX2 这使得这相当简单。

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

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

    把这个拆开, dir /b *.mpg 获取我当前目录中的.mpg文件列表 | 操作员将此列表导入ppx2,然后ppx2构建一系列并行执行的命令;一次4个,按照 -P 4 操作人员这个 -L 1

    ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4" ),及 {} 自动替换目录列表中的每一行。

        7
  •  0
  •   RmccurdyDOTcom    5 年前

    我无法让任何东西正常工作,结果只是使用powershell启动bat脚本。。有时甚至启动cmd/c也不起作用,不知道原因。。我甚至试过像start cmd/c记事本之类的东西;出口

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