4

我想知道是否可以让批处理文件检查自己的字符串。

我正在使用批处理文件来运行 Maven 命令,并且我想通过在脚本末尾搜索“FAILURE”字符串来检查是否有任何失败

我知道你可以FIND在其他文件中,但你可以让它检查当前的输出,还是将批处理文件输出保存为文本然后搜索它的最佳解决方案?

例如,如果我有一个批处理文件echo Hello World,它会 print Hello World,那么我想搜索输出Hello并告诉我它找到了 string Hello

4

4 回答 4

8

我喜欢 vane 对 mvn 提供的返回码采取行动的想法,但我喜欢使用||运算符,而不是使用 ERRORLEVEL。只有在前面的命令||失败时才会执行后面的命令。

::initialize error flag to undefined
set "mvnErr="

::run your Maven command and define the error flag if there was an error
call mvn {your arguments here} || set mvnErr=1

::You can now take action if there was an error
if defined mvnErr echo there was a Maven error
于 2012-10-24T21:45:46.730 回答
6

您可以通过errorlevel在每个 Maven 命令之后检查来做到这一点。例如

@ECHO OFF

set hasErrors=0

REM execute maven command here
if not errorlevel 0 set hasErrors=1

REM more batch command and similar checking ...

if %hasErrors%==1 (
    echo print your error info or do whatever
)
于 2012-10-24T19:11:57.557 回答
2

基于前两个答案,我认为这是两全其美的。||语法简短易读,每个命令之前的语句IF确保仅在先前的操作成功时才​​进行处理。

set hasErrors=0
IF %hasErrors%==0 call mvn -f ./mycoservices/pom.xml install || set hasErrors=1
IF %hasErrors%==0 call mvn -f ./mycostatic/pom.xml install || set hasErrors=1
IF %hasErrors%==0 call mvn -f ./mycoweb/pom.xml install || set hasErrors=1
IF %hasErrors%==0 call mvn -f ./mycowebbundle/pom.xml install || set hasErrors=1
于 2013-09-06T22:26:22.583 回答
0

为什么不只是在失败时退出批处理

if %ERRORLEVEL% NEQ 0 (
 echo exit /b %errorlevel%
 exit /b %errorlevel%
)
于 2014-11-28T02:28:42.317 回答