【问题标题】:Running all commands inside a .bat script在 .bat 脚本中运行所有命令
【发布时间】:2011-03-06 08:06:45
【问题描述】:

谁能告诉我为什么在执行 .bat 脚本后只执行第一个 mvn deploy 命令然后执行关闭。为什么所有命令都没有执行?

set GROUP_BASE=com.oracle.jdeveloper.jars
set VERSION=10.1.3.3.0.4157
set JDEV_HOME=C:/Oracle/jdevstudio10133
set REPO_URL=http://localhost:8081/nexus/content/repositories/thirdparty
set REPOSITORY_ID=thirdparty
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_lib -DartifactId=bc4jct -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/bc4jct.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_lib -DartifactId=adfm -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/adfm.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_jlib -DartifactId=bc4jui -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/jlib/bc4jui.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.jlib -DartifactId=osdt_core -Dversion=%VERSION% -Dfile=%JDEV_HOME%/jlib/osdt_core.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.ord_jlib -DartifactId=ordim -Dversion=%VERSION% -Dfile=%JDEV_HOME%/ord/jlib/ordim.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.xdoclet-1_2_1 -DartifactId=xdoclet-ibm-module-1.2.1 -Dversion=%VERSION% -Dfile=%JDEV_HOME%/xdoclet-1.2.1/xdoclet-ibm-module-1.2.1.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.jlib -DartifactId=jssl-1_1 -Dversion=%VERSION% -Dfile=%JDEV_HOME%/jlib/jssl-1_1.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.jlib -DartifactId=javax-ssl-1_1 -Dversion=%VERSION% -Dfile=%JDEV_HOME%/jlib/javax-ssl-1_1.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%

【问题讨论】:

标签: windows batch-file


【解决方案1】:

对你正在运行 mvn 的每一行试试这个:

START /WAIT "" mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_lib -DartifactId=bc4jct -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/bc4jct.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%

【讨论】:

  • 虽然在一个窗口中夺走了你的所有输出。您可能还想添加/B
【解决方案2】:

尝试使用CALL 命令。

...
call mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_lib -DartifactId=bc4jct -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/bc4jct.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
call mvn deploy:deploy-file -DgroupId=%GROUP_BASE%.BC4J_lib -DartifactId=adfm -Dversion=%VERSION% -Dfile=%JDEV_HOME%/BC4J/lib/adfm.jar -Dpackaging=jar -DrepositoryId=%REPOSITORY_ID% -Durl=%REPO_URL%
...

如果您在不使用 CALL 的情况下调用命令,则控制权会传递给新程序并且不会返回(在您的示例中,这是在第一个 mvn ... 之后发生的情况)。 CALL 将控制权返回给调用者并继续执行下一条指令。

【讨论】:

  • @Bobby: "start" 打开了一个新的 CMD 窗口,我认为您不希望每个命令都有一个窗口(特别是如果您有很多命令:D)。我也认为“开始”不会等待进程终止,但我可能错了。
  • @dpb:我从来没有注意到那个人会打开一个新的 cmd。 :/ 另外,我认为有人问过它,它运行“异步”...
  • 我相信CALL 仅在调用另一个批处理文件时才相关。
  • @aphoria CALL 对任何可执行文件都有效(START 调用 ShellExecute 并可以打开任何已注册的类型或 url 协议,但该命令将在新窗口中运行等)
  • @aphoria:有些工具实际上使用了批处理文件,这可能会导致意想不到的事情。 ant 也是这样一个工具。
猜你喜欢
  • 2022-10-08
  • 2015-03-16
  • 1970-01-01
  • 2010-09-12
  • 2022-10-19
  • 2011-03-10
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
相关资源
最近更新 更多