我想知道是否可以让批处理文件检查自己的字符串。
我正在使用批处理文件来运行 Maven 命令,并且我想通过在脚本末尾搜索“FAILURE”字符串来检查是否有任何失败
我知道你可以FIND
在其他文件中,但你可以让它检查当前的输出,还是将批处理文件输出保存为文本然后搜索它的最佳解决方案?
例如,如果我有一个批处理文件echo Hello World
,它会 print Hello World
,那么我想搜索输出Hello
并告诉我它找到了 string Hello
。
我想知道是否可以让批处理文件检查自己的字符串。
我正在使用批处理文件来运行 Maven 命令,并且我想通过在脚本末尾搜索“FAILURE”字符串来检查是否有任何失败
我知道你可以FIND
在其他文件中,但你可以让它检查当前的输出,还是将批处理文件输出保存为文本然后搜索它的最佳解决方案?
例如,如果我有一个批处理文件echo Hello World
,它会 print Hello World
,那么我想搜索输出Hello
并告诉我它找到了 string Hello
。
我喜欢 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
您可以通过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
)
基于前两个答案,我认为这是两全其美的。||
语法简短易读,每个命令之前的语句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
为什么不只是在失败时退出批处理
if %ERRORLEVEL% NEQ 0 (
echo exit /b %errorlevel%
exit /b %errorlevel%
)