【问题标题】:Stray newline in file redirect文件重定向中的杂散换行符
【发布时间】:2016-02-09 11:34:45
【问题描述】:

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

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

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

自从几个星期以来,这种行为被破坏了,我不知道原因是什么。我知道效果是什么。

在我的系统上(并且仅在我的系统上,而不是在我同事的系统上),捕获文件“myversion.txt”不再是包含修订号的一行而是两行。第一行为空白,下一行包含修订号。

如果我用十六进制编辑器查看,我可以看到 '0d0a32...' 作为内容。

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

c:...>svnversion .
22837

c:...>_

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

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

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

亲切的问候。

【问题讨论】:

  • 您可以在命令行和批处理文件中尝试svnversion . | findstr /N "^"svnversion . &gt; myversion.txt 从命令行调用它时是否也创建了两行?您是否检查过您是否只有一个版本的 svnversion 以及它是什么版本? svnversion.bat 文件是否存在于任何地方?
  • 您可以通过svnversion --version查看不同计算机上的版本

标签: windows shell batch-file svn


【解决方案1】:

我从未使用过svnversion - 但奇怪的是两台机器上的文件不同。也许已应用的更新有所不同?

也许

 for /f %%a in ('svnversion . ') do set "MyVersion=%%a"

会产生一个可行的系统,但问题的根本原因应该真正调查和解决。

【讨论】:

    【解决方案2】:

    你可以这样试试:

    @echo off
    
    for /f %%a in (myversion.txt) do set "MyVersion=%%a"
    
    echo Version = %MyVersion%
    

    【讨论】:

    • 优雅的解决方案,谢谢!我自己应该考虑到这一点。测试了#Mago 完成的版本,该版本也可以工作,并且它会删除临时文件。
    【解决方案3】:

    附加信息(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%
    

    【讨论】:

    • 嗯。其原因是延迟膨胀特性。你需要一行setlocal enabledelayedexpansion(最好是在打开@echo off之后立即)调用delayedexpansion模式,然后...SVNREV=%%a!SVNREV!积累数据。至少换行之谜已经解决了。
    【解决方案4】:

    这是至少 SVN 1.9.1 的已知错误。

    由 Stefan Küng 在Re: 1.9.1 bug in svnversion? 描述和确认

    【讨论】:

    • 今天早上发现,安装了1.9.3,已经修复了。
    猜你喜欢
    • 2011-06-11
    • 2018-07-17
    • 2023-03-22
    • 2015-02-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    相关资源
    最近更新 更多