文件重定向中的错误换行符

时间:2016-02-09 11:34:46

标签: windows shell batch-file svn

我有一个批处理脚本,其中包含以下两行。

svnversion . > myversion.txt
set /p MyVersion=<myversion.txt

这一直没有任何问题,svnversion生成一行包含沙盒的修订号,下一行将此修订号分配给环境变量。

几周以来,这种行为已被打破,我不知道原因是什么。我知道效果是什么。

在我的系统上(并且只在我的系统上,而不是在我的同事的系统上)捕获文件&#39; myversion.txt&#39;不再有一行具有修订号而是两行。第一行是空白,下一行包含修订号。

如果我看一下十六进制编辑器,我可以看到&#39; 0d0a32 ...&#39;作为内容。

如果我在没有捕获输出的情况下运行命令,则不会产生空行。 e.g:

c:...>svnversion .
22837

c:...>_

如果我在同事的系统上运行相同的命令,则空白行不会出现在捕获的结果中。我们都有相同的系统。

因此,我无法再使用该脚本来捕获svn修订号。

问题:   - 是否有人知道在捕获的结果中导致换行的原因是什么?   - 是否有另一种在批处理文件环境中捕获svn修订号的方法?

亲切的问候。

4 个答案:

答案 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?

描述并承认