我总是让詹金斯失败:
构建步骤'执行Windows批处理命令'将构建标记为失败
但是当我输入批处理命令时:" echo退出代码是%errorlevel%"我得到0代码。
我的批处理命令是:
ELSE (
ROBOCOPY.EXE C:\dir2\ C:\dir1\ script.bat /IS
cd C:\dir1\
echo Exit Code is %errorlevel%
C:\dir1\script.bat
echo Exit Code is %errorlevel%
ROBOCOPY.EXE C:\dir1 C:\dir3 /E /IS /XF *.config
echo Exit Code is %errorlevel%
)
echo TEST
从不显示命令echo TEST。当我从批处理中删除" C:\ dir1 \ script.bat"一切正常,詹金斯的工作就是成功。
脚本bat仅包含如下命令:
del。\ bin \ library.dll
你怎么看,问题出在script.bat上?当我在这个脚本的末尾添加:EXIT / B 0时,作业也失败了。
答案 0 :(得分:0)
你必须在这里向我们提供超过一半的陈述,以获得明确的答案。可能缺少)
之前的else
(必须与else
关键字位于同一行)。
更有可能的是,你是delayed expansion
问题的4800万受害者。在SO上看到无数的例子。
在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}
因此,FOR ... DO (block)
将在遇到IF (something) else (somethingelse)
时使用%variables%
的值执行。
解决此问题的两种常见方法是1)使用IF
并使用setlocal enabledelayedexpansion
代替!var!
来访问已更改的%var%
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
因此,在执行之前,(假定的)var
已解析时,您会看到errorlevel
的价值。