我有一个批处理脚本,其中包含以下两行。
svnversion . > myversion.txt
set /p MyVersion=<myversion.txt
这一直没有任何问题,svnversion生成一行包含沙盒的修订号,下一行将此修订号分配给环境变量。
几周以来,这种行为已被打破,我不知道原因是什么。我知道效果是什么。
在我的系统上(并且只在我的系统上,而不是在我的同事的系统上)捕获文件&#39; myversion.txt&#39;不再有一行具有修订号而是两行。第一行是空白,下一行包含修订号。
如果我看一下十六进制编辑器,我可以看到&#39; 0d0a32 ...&#39;作为内容。
如果我在没有捕获输出的情况下运行命令,则不会产生空行。 e.g:
c:...>svnversion .
22837
c:...>_
如果我在同事的系统上运行相同的命令,则空白行不会出现在捕获的结果中。我们都有相同的系统。
因此,我无法再使用该脚本来捕获svn修订号。
问题: - 是否有人知道在捕获的结果中导致换行的原因是什么? - 是否有另一种在批处理文件环境中捕获svn修订号的方法?
亲切的问候。
答案 0 :(得分:4)
我从未使用svnversion
- 但奇怪的是两台机器上的文件不同。也许已经应用的更新存在差异?
也许
for /f %%a in ('svnversion . ') do set "MyVersion=%%a"
会产生一个可行的系统,但问题的根本原因应该被调查和解决。
答案 1 :(得分:1)
您可以尝试这样:
@echo off
for /f %%a in (myversion.txt) do set "MyVersion=%%a"
echo Version = %MyVersion%
答案 2 :(得分:0)
其他信息(与Subversion相关):
重定向输出时,svnversion行为会发生变化(!?)
c:\...>svnversion .
22923:22924M
c:\...>svnversion . >temp.txt
c:\...>type temp.txt
M
22923:22924
请注意,未重定向的输出会将“M”(已修改的沙盒指示符)放在修订号的末尾和第一行的重定向输出中。
我不知道为什么(或如何)这样做。但昨天我正在使用一个未经修改的沙箱,我在重定向输出中得到一个空行。 今天我修改了沙箱,但我在报告中错过了“M”。现在我知道为什么了!
这是一个将所有内容重新组合在一起的脚本。 (粗略但它对我有用,欢迎提出改进建议。)
::
:: test.cmd - concatinate output from svnversion
::
if '%1'=='SVNREV' goto svnrev
set SVNREV=
for /f %%a in ('svnversion .') do call test.cmd SVNREV %%a
echo SVNREV=%SVNREV%
goto end
:svnrev
set SVNREV=%2%SVNREV%
goto end
:end
请注意,以下不正在运行。 (不要问我为什么)
set SVNREV=
for /f %%a in ('svnversion .') do set SVNREV=%%a%SVNREV%
echo SVNREV=%SVNREV%
答案 3 :(得分:0)
这是至少SVN 1.9.1的已知错误。
StefanKüng在Re: 1.9.1 bug in svnversion?
描述并承认