【问题标题】:Get inputs from text file and delete lines in another text file according to the inputs从文本文件中获取输入并根据输入删除另一个文本文件中的行
【发布时间】:2018-02-24 11:54:51
【问题描述】:

我有一个文本文件(name.txt),格式如下:

aaaaaaaa 1245
bbbbbbbb,456
1.2.3.4 nnnnnnnn
cccccccc

另一个文本文件 (cleanup.txt) 包含我需要删除的名称:

aaaaaaaa
nnnnnnnn

如何使用批处理文件根据cleanup.txt删除name.txt中的一些行并创建一个新文件new_name.txt?

new_name.txt

bbbbbbbb,456
cccccccc

我现在做的是手动编辑批处理文件命令

type name.txt | findstr /v aaaaaaaa | findstr /v nnnnnnnn > new_name.txt

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    您应该能够使用这样的基本命令:

    FindStr/VG:"cleanup.txt" "name.txt">"new_name.txt"
    

    【讨论】:

    • 但这会出现问题,例如删除所有具有该字符串的行。我有服务器名称,例如 HAIM、HAIM1、HAIM2,如果我在 cleanup.txt 中使用 HAIM,其余两个也将被删除。如何删除完全匹配?
    • 我想我是用 FindStr /I /X /V /G:"cleanup.txt" "name.txt">"new_name.txt"
    • 当然,这些额外的开关在这种情况下会有所帮助,但您需要了解,我们只能根据回答时可用的信息提供回复。如果您提供信息“我有服务器.....”并将name.txt 的格式更改为与cleanup.txt 相同的格式,我们可以在一周前回复您。一周后用额外的信息回复我的答案,并且没有给我足够的时间回复,这有点不公平。不过,您的 cleanup.txt 匹配可能会更好,这样它就可以匹配完整的单词 \<HAIM1\>
    【解决方案2】:

    这可以使用 Compo 已经发布的命令 FINDSTR 来完成。

    %SystemRoot%\System32\findstr.exe /V /G:"cleanup.txt" "name.txt" >"new_name.txt"
    

    FINDSTRname.txt 的每一行中搜索cleanup.txt 中列出的任何字符串,并在正匹配时从name.txt 输出该行。

    但输出是来自name.txt NOT 的行,其中包含cleanup.txt 中列出的字符串,因为/V 选项会反转输出。

    FINDSTR 的输出被重定向到文件new_name.txt

    您可以添加开关/B 以写入文件new_name.txtNOT 包含cleanup.txt 中的任何字符串的行开始 name.txt.

    打开命令提示符窗口并运行 findstr /? 以获取有关 FINDSTR 选项的更多信息。

    另请阅读有关 Using Command Redirection Operators 的 Microsoft 文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2023-03-18
      • 2016-02-08
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多