批处理文件中的字符串断言/抛出异常

问题描述 投票:0回答:2
通过 Jenkins 的

bat 文件。我有一部分代码如下所示

IF %Status% == Completed (
    Echo Process has executed successfully
)

ELSE (
    <Code to be added>
)

我的要求是,如果 Status 的值不是“Completed”,那么 bat 文件必须抛出异常或其他内容,以便 Jenkins 构建失败。有没有办法在bat文件中断言或抛出异常?请帮我解决这个问题?

batch-file jenkins exception assertion
2个回答
0
投票

批处理文件的每一行都被视为一个新命令。

Else
本身不是,所以当它在一个新线上时,它被视为一个。您需要将括号与
else
放在同一行。

此外,您需要双引号匹配项以确保消除任何可能的空格。我在

/i
语句中添加了
if
开关,以使匹配不区分大小写。

IF /i "%Status%" == "Completed" (
    echo Process has executed successfully
) else (
    echo Failed to build
    pause
    exit /b 1
)

另一种方法是不使用 else。

IF not /i "%Status%" == "Completed" goto :error
echo Process has executed successfully
echo other success code goes here
goto :eof
:error
echo Your code has failed.
pause
goto :eof

0
投票

maven构建失败时如何停止批量执行

实施:
https://github.com/andry81/contools/tree/HEAD/Scripts/Tools/std/assert.bat
https://github.com/andry81/contools/tree/HEAD/Scripts/Tools/std/errlvl.bat

断言.bat

@echo off
@if 0 %*

errlvl.bat:

@exit /b %~1

build.bat

@echo off

rem drop error level
call;

if 1 == 2 (
  rem
) else (
  call errlvl.bat 123
  assert.bat "build fail"
  echo no execution after this line
)
>build.bat
"build fail" was unexpected at this time.
>echo %ERRORLEVEL%
123

注意:

assert.bat
不需要
call
前缀,因为这是最后一条指令。

注意:您不能用

@if 0 ...
替换调用,因为在这种情况下,即使不评估外部
if
表达式,它也始终会评估。

© www.soinside.com 2019 - 2024. All rights reserved.