我从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
修订:
也是该死的......真的很好摆脱它:)
答案 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文件之后