根据令牌删除txt文件中的行

时间:2011-08-24 16:00:57

标签: batch-file

我有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,,,,,

full_delete

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,它可以正常工作但只删除找到的最后一个令牌行。谢谢。弗兰克

1 个答案:

答案 0 :(得分:2)

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

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) 之前添加<来更改了两个FIND命令。

此外,如果您想在批处理文件中使用该脚本,您应该将循环体命令放在不同的行上,如下所示(使用第二个脚本作为示例):

full_add.txt

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