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

为什么只执行此Windows批处理文件的第一行,而所有三行都在命令shell中执行?,windows,batch-file,cmd,windows-7,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:ins

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

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

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

Echo one
cmd
Echo two
cmd
Echo three
cmd
只执行前两行。但如果在命令提示下键入“exit”,则会处理接下来的两行。这是一个装着另一个的炮弹

要确保脚本中没有发生这种情况,只需在第一个命令结束时键入“exit”


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


您可以尝试的另一件事是使用类似的命令。

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

呼叫
会有所帮助。然而今天它没有

我就是这样解决的:

Bat文件内容(如果您想在出现cmds错误时停止批处理)

Bat文件内容(如果您想继续在出现cmds错误时批处理)


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

有没有办法强制脚本执行下一个
mvn
命令?我以前已经将
ant
放在windows批处理文件中,需要调用
才能执行
ant
。如果没有
call
,批处理将在第一个命令后停止,因此第二个命令将不执行。有关
的更多信息,请调用
start
将生成一个新窗口,并且三个命令中的每一个都将并行运行。如果您需要它们同步运行,请使用
call
。脚本环境以这种方式运行到底有什么意义?如果我写了一个包含两个命令的脚本,我希望这些命令能够被执行;我不希望环境仅仅因为其中一个命令恰好作为脚本本身实现而决定停止执行我的脚本。@bames53:这是一个源于DOS的限制,DOS在Windows中的命令提示符的现代实现中延续了这一限制。由于微软的目标是保持向后兼容性,这就是结果。如果你想让cmd windows保持打开状态,请在末尾添加
调用pause
;Maven确实使用了批处理文件,这就是为什么他们需要使用
call
。这不是一个没有终止的嵌套shell。真是一个巧合:我来到这里时遇到了同样的问题,批处理文件中也有同样的命令-多行“mvn安装:安装文件”:-d可能与@fishbone重复,巧合的是,你和OP都有1.3k的声誉。。(这里的第一个示例相当于
cmd1&&cmd2&&cmd3&&cmd4
,基本上使所有命令成为一行。)是的。我这样写是因为它是一个bat文件,大多数情况下你会有多个,可能很长的命令,在将来的维护中,一行4个命令将不好。可读性是编写好程序的关键,因此它们在不同的行上。这个解决方案对我起到了作用。
调用
解决方案并没有在出错时停止,这个解决方案确实如此es.在命令遇到错误时工作得非常好!很高兴知道,如果您显式打开另一个实例(使用
cmd
命令),您自然必须
退出它才能返回到原始实例。但这与问题无关,因此请删除此“答案”以避免向下投票。
cmd1 && ^
cmd2 && ^
cmd3 && ^
cmd4
cmd1 & ^
cmd2 & ^
cmd3 & ^
cmd4