【问题标题】:How to combine multiple lines in a single text file into one line, in Windows?如何在 Windows 中将单个文本文件中的多行合并为一行?
【发布时间】:2013-03-17 09:09:56
【问题描述】:

我有多个遵循这种格式的标准文本文件,每个文件的行数不同:

Line1
Line2
Line3
Line4

我想将每一行合并为一行,每组字符之间有一个空格,所以文本文件看起来像这样:

Line1 Line2 Line3 Line3

...等等。由于每个文本文件包含不同数量的行,这需要使用任何给定数量的行。我的意图是不合并文本文件中的行;我希望每个文本文件保持独立。我在网上找到的所有解决方案要么不太适合这个,要么只适用于 UNIX。我运行的是 Windows 7。这可以在 Powershell、VBS、Batch 中完成,一个特定的程序,没关系,它只需要与 Windows 一起工作。

非常感谢!

【问题讨论】:

    标签: windows for-loop batch-file cmd


    【解决方案1】:
    @ECHO OFF
    setlocal
    (SET var=)
    FOR /f "delims=" %%x IN (list.txt) DO (
    CALL SET var=%%var%% %%x
    )
    SET var=%var:~1%
    echo var=%var%=
    

    其中 list.txt 是包含您的行的文件,而 var 是您希望将行连接到的变量。

    【讨论】:

    • 非常感谢,这非常有帮助。
    【解决方案2】:

    安装git-scm、cygwin或者其他包含bash的,然后就可以了

    cat *.txt | tr "\n" " "
    

    【讨论】:

      【解决方案3】:

      使用批处理:

      for /f "usebackqdelims=" %%i in ("infile.txt") do @<nul set /p"=%%i ">>"outfile.txt"
      >>"outfile.txt" echo.
      

      【讨论】:

      • Endoro,你知道如何做相反的事情吗?例如,让一行变成多行(每个项目以空格分隔得到它自己的行)。
      • @Cornbeetle 是的,批处理可以处理这个问题,但是批处理中的(输入)行不能超过 8191 个字符。
      • @Endoro 你能帮我写一个脚本,将句子中的每个单词放在它自己的行中,所以如果我有一个包含 5 个单词的句子,它会变成 5 行?
      • @Endoro 非常感谢!这比我想象的要容易得多!
      【解决方案4】:

      使用 PowerShell 尝试一下,看看它是否是您想要的:

      $my_file = "C:\file.txt"
      $out_file = "C:\out.txt"
      (Get-Content -Path $my_file) -join " " | Set-Content -Path $out_file
      

      【讨论】:

        【解决方案5】:

        为了完整起见,这是 中的另一个解决方案:

        Set fso = CreateObject("Scripting.FileSystemObject")
        
        Set infile  = fso.OpenTextFile("C:\infile.txt")
        Set outfile = fso.OpenTextFile("C:\outfile.txt", 2, True)
        
        If Not infile.AtEndOfStream Then outfile.Write infile.ReadLine
        Do Until infile.AtEndOfStream
          outfile.Write " " & infile.ReadLine
        Loop
        
        infile.Close
        outfile.Close
        

        【讨论】:

        • 好意,但是我们可以在同一个文件中同时读/写吗?此外,我在 Line:6 Char:34 处出现运行时错误 #54“Bad file mode”,并且我确信因为 outfile 已使用默认 iomode ForReading 打开。但是即使解决了这个问题,我们还是要在写入之前先阅读整个内容,否则我们会丢失整个文件内容,同意吗? ;)
        • @PanayotKarabakalov 抱歉,复制/粘贴错误。当然outfile 是一个不同的文件。
        • 我认为这是一个错字,但不确定。很高兴看到你修好了。
        【解决方案6】:

        这样的?

        (gc C:\test.txt)  -join " "
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-23
          • 1970-01-01
          • 1970-01-01
          • 2020-07-10
          • 1970-01-01
          • 1970-01-01
          • 2021-11-08
          • 1970-01-01
          相关资源
          最近更新 更多