【问题标题】:Delete line in txt file based on token根据token删除txt文件中的行
【发布时间】:2011-08-24 16:00:57
【问题描述】:

我有 txt 文件 full_add,我需要根据 full_delete 中的标记查找和删除行。然后,将 full_add 与其余行一起保存。 这是每个文件中的示例数据:

full_add

Employee,800751,,1,9999,,,,,
Employee,800752,,1,9999,,,,,
Employee,800761,,1,9999,,,,,
Employee,800762,,1,9999,,,,,

完全删除

Employee,800751
Employee,800762
Employee,800742

删除后的 full_add 最终结果

Employee,800752,,1,9999,,,,,
Employee,800761,,1,9999,,,,,

这是我的想法:

FOR /F "eol=; tokens=2 delims=," %i in (full_delete.txt) do find /v "%i" full_add.txt > full_add.txt

我得到空文件 full_add。如果我将>full_add.txt 更改为>tmp.txt,它会起作用,但只会删除找到的最后一个标记行。谢谢。弗兰克

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    我认为您应该保留当前输出到tmp.txt 的更改,但在这种情况下,您还需要删除原始full_add.txt 并将tmp.txt 重命名为full_add.txt

    FOR /F "eol=; tokens=2 delims=," %i IN (full_delete.txt) DO (FIND /v "%i" < full_add.txt > tmp.txt & DEL full_add.txt & RENAME tmp.txt full_add.txt)
    

    或者,您可以将tmp.txt 复制到full_add.txt,然后删除tmp.txt

    FOR /F "eol=; tokens=2 delims=," %i IN (full_delete.txt) DO (FIND /v "%i" < full_add.txt > tmp.txt & COPY tmp.txt full_add.txt & DEL tmp.txt)
    

    更新

    我通过在 full_add.txt 之前添加 &lt; 更改了两个 FIND 命令。

    另外,如果您想在批处理文件中使用脚本,您可能应该将循环体命令放在单独的行中,如下所示(以第二个脚本为例):

    FOR /F "eol=; tokens=2 delims=," %i IN (full_delete.txt) DO (
      FIND /v "%i" < full_add.txt > tmp.txt
      COPY tmp.txt full_add.txt
      DEL tmp.txt
    )
    

    当然,缩进是完全可选的。

    【讨论】:

    • 我使用了第一种方法并且工作正常,只是它在文件的开头添加了 3 行: ---------- FULL_ADD_EMPLOYEE.TXT -------- -- FULL_ADD_EMPLOYEE.TXT ---------- FULL_ADD_EMPLOYEE.TXT 另外,如果我把它放在一个批处理中(使用 %%i),它会给我语法错误。感谢您的快速和出色的帮助。 F.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多