【问题标题】:Appending and overwriting the beginning of a text file (windows)追加和覆盖文本文件的开头(Windows)
【发布时间】:2010-10-16 21:07:39
【问题描述】:

我有两个文本文件。我想将 file1.txt 的四行内容附加到 file2.txt 的前四行。这必须覆盖 file2.txt 前四行的所有记录,但保留原始内容的其余部分(其他行)。

如何使用批处理或 Windows 提示符来做到这一点?

【问题讨论】:

    标签: append


    【解决方案1】:
    copy file1.txt temp.txt
    echo. >> temp.txt
    more +5 file2.txt >> temp.txt
    move /y temp.txt file2.txt
    

    EDIT:添加了“echo.>> temp.txt”指令,它应该在 temp.txt 中添加一个换行符,从而允许 file2.txt 的“干净”合并(如果 file1 .txt 不以换行符结尾)。

    【讨论】:

    • 您好,我快到了,但第 5 行的内容附加了第 4 行的内容。我想保持第 5 行不可触及。
    • @Andy:我想应该是 +5 因为他想删除 file2.txt 的前四行(因此从第 5 行开始复制)。 @fguser:我通过插入“回声”来编辑脚本。行 - 看看它是否适合你。
    • 这就是我喜欢 SO 的原因。很好的答案。
    • @Guido:我在 XP 上玩得更多,似乎认为 +0 从第 1 行开始,所以 +5 从第 6 行开始。尾在 *nix 上,在另一个手,反其道而行之。
    【解决方案2】:

    除非两个文件开头的四行占用完全相同的空间,否则你不能不重写整个文件。

    您不能在任意点向文件中插入或删除数据 - 您可以覆盖现有数据(逐字节)、截断文件或追加到末尾,但不能删除或插入到中间。

    所以基本上你需要:

    • 开始一个新文件,其中包含 file1.txt 的前四行
    • 跳过 file2.txt 的前四行
    • 将 file1.txt 的其余部分附加到新的 file2.txt

    您可以使用来自 Unix 的 head/tail 命令相当轻松地做到这一点,如果这是一个可接受的解决方案,您可以从 Cygwin 获得。 Windows Services for Unix 的头部/尾部很可能也会起作用。

    【讨论】:

    • 好的,所以问题是如何删除 file2.txt 的前四行并将其附加到 file1.txt 上? (使用批处理)谢谢!
    • 你的问题有点混乱。请举一个例子,有两个示例文件,之前和之后。
    【解决方案3】:

    如果您使用coreutils from Gnutils,您将能够使用 Cygwin 做很多事情,而无需安装 cygwin。 然后,您可以使用 head、tail 和 cat 之类的东西,它们可以让您做您想做的事情。

    例如

    head -n 4 file2.txt
    

    获取file2的前四行。

    从上面链接的页面中提取 zip,然后从 bin 目录中获取您需要使用的任何工具,并将它们放在路径中的目录中 - 例如对于下面你想要的 mv,head 和 tail。您可以使用内置的 DOS 移动命令,但您需要稍微更改选项。

    这个问题有点不清楚,但如果您要删除 file2.txt 的前四行并将它们附加到 file1.txt,您可以执行以下操作:

    head -n 4 file2.txt >> file1.txt
    tail -n +5 file2.txt >> temp.txt
    mv temp.txt file2.txt
    

    【讨论】:

      【解决方案4】:

      单独使用批处理我不确定你能做到。

      您可以使用 Unix 命令 -- 并且可以在 Windows 下使用 Cygwin 轻松使用 Unix 命令。

      在这种情况下你想要:

      #!/bin/bash
      head -n 4 file1.txt > result.txt   # first 4 lines of file1
      tail -n +5 file2.txt >> result.txt # append lines 5, 6, 7... of file2
      mv result.txt file2.txt    # replace file2.txt with the result
      

      【讨论】:

      • 第 5 行应该是 tail -n +5 吗?
      【解决方案5】:

      如果你用 Windows 批处理以外的东西编写脚本,你可以做到这一点。带有windows脚本主机的vbscript或jscript应该可以做到。它们中的每一个都有一种方法可以从一个文件中获取行并覆盖另一个文件的行。

      【讨论】:

        【解决方案6】:

        您可以通过创建一个临时的第三个文件来做到这一点,从第一个文件中提取行并将它们添加到临时文件中,然后读取第二个文件,并在读取四个回车/换行对后,将其余部分写入临时文件。然后,删除第二个文件并将临时文件重命名为第二个文件名。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-21
          • 2017-07-21
          • 2016-01-01
          • 2021-12-13
          • 2022-01-25
          • 2016-06-19
          • 2017-09-14
          • 2013-10-28
          相关资源
          最近更新 更多