为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?

我有一个批处理文件,一个接一个地执行三个Maven命令。每个命令都可以在脚本中成功执行!但是,当我将所有三个命令添加到同一个文件中时,只有第一个命令在脚本退出之前执行。知道为什么吗?

mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar  -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar  -Dpackaging=jar -DgeneratePom=true
mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar  -Dpackaging=jar -DgeneratePom=true

同样,如果我复制所有三个命令并将它们粘贴到命令shell (cmd.exe)中,它们会一个接一个地执行,没有任何问题。所以这显然是dos批处理文件的一些问题。

121733 次浏览

它应该是特定的mvn命令execs和不返回,因此不执行其余的命令。

试着写以下批处理文件并执行它:

Echo one
cmd
Echo two
cmd
Echo three
cmd

只有前两行被执行。但是如果您在命令提示符处输入“exit”,则会处理接下来的两行。它是一个壳装载另一个壳。

为了确保这不是脚本中发生的事情,只需在第一个命令结束时键入“exit”。

HTH !

Maven使用批处理文件来完成其业务。对于任何批处理脚本,您必须使用call命令调用另一个脚本,以便它知道在被调用的脚本完成后返回到您的脚本。尝试将call前置到所有命令。

你可以尝试的另一件事是使用start命令,它的工作原理应该类似。

要从一个脚本执行更多的Maven构建,您应该以以下方式使用Windows 调用函数:

call mvn install:install-file -DgroupId=gdata -DartifactId=base -Dversion=1.0 -Dfile=gdata-base-1.0.jar  -Dpackaging=jar -DgeneratePom=true
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger -Dversion=2.0 -Dfile=gdata-blogger-2.0.jar  -Dpackaging=jar -DgeneratePom=true
call mvn install:install-file -DgroupId=gdata -DartifactId=blogger-meta -Dversion=2.0 -Dfile=gdata-blogger-meta-2.0.jar  -Dpackaging=jar -DgeneratePom=true

call会有所帮助。然而今天却没有。

我是这样解决的:

Bat文件内容(如果你想在其中一个cmds错误时停止批处理)

cmd1 && ^
cmd2 && ^
cmd3 && ^
cmd4

Bat文件内容(如果你想在其中一个cmds错误时继续批处理)

cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4

只有当我在命令/ Dos窗口中输入EXIT时,批处理文件中的Dos命令才会运行。当我从批处理文件中删除CMD时,这个问题解决了。不需要了。