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

时间:2010-10-27 19:09:55

标签: windows batch-file cmd windows-7

我有一个批处理文件,一个接一个地执行三个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批处理文件的一些问题。

6 个答案:

答案 0 :(得分:264)

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

您可以尝试的另一件事是使用start命令,该命令应该起作用。

答案 1 :(得分:19)

call有所帮助。但是今天它没有。

这就是我解决它的方法:

蝙蝠文件内容(如果您想在错误之一时停止批处理)

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

蝙蝠文件内容(如果您希望继续批处理其中一个cmds错误)

cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4

答案 2 :(得分:6)

要从一个脚本执行更多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

答案 3 :(得分:1)

应该是特定的mvn命令exec并且不返回,因此不执行其余的命令。

答案 4 :(得分:0)

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

Echo one
cmd
Echo two
cmd
Echo three
cmd

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

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

HTH!

答案 5 :(得分:0)

仅当我在命令/ DOS窗口中键入EXIT时,批处理文件中的命令才运行。从批处理文件中删除CMD时,此问题已解决。不用了。