我有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
,它可以正常工作但只删除找到的最后一个令牌行。谢谢。弗兰克
答案 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
当然,缩进完全是可选的。