如果从Jenkins CI作业执行,批处理返回不同的结果

时间:2013-11-28 10:23:21

标签: svn batch-file

我从apache ant build.xml执行批处理文件,从Jenkins CI作业(Win 7 x64 Ent SP1)运行。

批处理文件:

@Echo Off
svn info | findstr /C:"Relative URL:" > temp1.txt
set /p str=<temp1.txt
echo !str! @ > temp1.txt
svn info | findstr /C:"Revision:" > temp2.txt
copy *.txt temp3.txt
setLocal EnableDelayedExpansion
for /f "tokens=* delims= " %%a in (temp3.txt) do (
set s=!s!%%a
)
echo !s! >> BrandingText.PROPERTIES

结果如下:

BrandingText.PROPERTIES:

 @ Revision: 133708

temp3.txt:

!str! @ 
Revision: 133708

temp2.​​txt

Revision: 133708

temp1.txt

!str! @ 

另一方面,如果我在本地运行它(从我的机器上调用CMD执行批处理,来自CMD),我得到了正确的结果......为什么?如何在我的机器和构建服务器(Jenkins CI)工作中修复批处理以获得相同和正确的结果?

我不是每天的Windows Shell编码器,所以任何帮助都将受到高度赞赏。哦,加上<{p>结尾的NewLine character

  

修订:

也是该死的......真的很好摆脱它:)

2 个答案:

答案 0 :(得分:2)

我认为让构建脚本了解版本控制是一个糟糕的主意 - 这些问题应该是分开的。

话虽如此,如果您只是将svnversion的输出设置为变量,或者甚至将其写入文件,您将会有更好的时间。

答案 1 :(得分:0)

@echo off
    setlocal enableextensions enabledelayedexpansion
    rem and here starts the code
    ....

也许,这应该有用

如果延迟扩展已关闭,!str!(使用有效内容定义的变量),则返回!str!。没有延迟扩展,因此没有!变量的翻译。

但是,echo %str% @ > temp1.txt应该有效。

已编辑 - 对于令人讨厌的新行字符

<temp2.txt set /p t2=
<nul       set /p t2=%t2%> temp2.txt

显然,在生成了temp2.​​txt文件之后