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

Svn 如果从Jenkins CI作业执行,则批处理返回不同的结果,svn,batch-file,Svn,Batch File,我正在从ApacheAnt 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 t

我正在从ApacheAnt 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
temp3.txt:

!str! @ 
Revision: 133708
temp2.txt

Revision: 133708
temp1.txt

!str! @ 
另一方面,如果我在本地运行它(从我的机器的CMD调用执行批处理的ant target),我会得到正确的结果。。。为什么?如何在我的机器和buildserver(Jenkins CI)作业中修复批处理以获得相同和正确的结果

我不是日常的Windows外壳代码编写者,因此任何帮助都将不胜感激。哦,再加上结尾的
换行符

修订:

也是他妈的讨厌的一个。。。摆脱它会很好:)

也许,这应该管用

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

但是,
echo%str%@>temp1.txt
应该可以工作

已编辑-用于讨厌的新行字符

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

我认为让构建脚本意识到版本控制是一个糟糕的想法-这些问题应该分开考虑


话虽如此,如果您只是将
svreversion
的输出设置为一个变量,甚至将其写入一个文件,您会过得更好。

此注释是否可以作为此行为的解释:?我想我试过使用%%,但是它甚至在我的机器上都不起作用……确切地说,你想从哪里删除讨厌的新行字符?从temp2.txt文件中:)请参阅更新的答案。希望这对你有用。是的。。。你这是在给自己制造麻烦。任何地方的构建都必须在本地工作,理想情况下,CI构建就是这样(如果不是这样的话,那么构建就糟透了)。为什么在本地版本上需要任何svn修订信息?这是不相关的-因为将有本地修改无论如何。谢谢。不,它不起作用;我现在得到了空的temp2.txt。再次感谢您的努力和时间。:)我们也这样做,但在一些罕见的情况下。。。将这些值分布在构建基础架构中很好。:)其目的不是依赖,甚至不是知晓。。如果有任何值,则使用它;如果没有,则build.xml不关心。就这么简单。
@echo off
    setlocal enableextensions enabledelayedexpansion
    rem and here starts the code
    ....
<temp2.txt set /p t2=
<nul       set /p t2=%t2%> temp2.txt