2011-08-24 55 views
1

我有txt文件full_add,我需要根據full_delete中的標記查找和刪除行。然後,用其餘的行保存full_add。 這是在每個文件樣本數據:根據標記刪除txt文件中的行

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 deliting

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

這是我的想法後, 210

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

我得到空文件full_add。如果我爲>tmp.txt更改>full_add.txt,它可以工作,但只能刪除找到的最後一個標記線。謝謝。弗蘭克

回答

2

我想你應該留你在哪裏輸出到tmp.txt當前的變化,但在這種情況下,您還需要去掉原有的full_add.txt和重命名tmp.txtfull_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.txtfull_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) 

UPDATE

我在full_add.txt之前通過添加<更改了兩個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 
) 

當然,縮進是完全可選的。

+0

我使用了第一種方法並且工作正常,只有它向文件的開頭添加了3行:---------- FULL_ADD_EMPLOYEE.TXT ---------- FULL_ADD_EMPLOYEE.TXT ---------- FULL_ADD_EMPLOYEE.TXT另外,如果我把它放在一個批處理中(使用%% i),它會給我語法錯誤。感謝您的快速和優秀的幫助。 F. – Frank

+0

@Frank:請參閱我的更新。 –

+0

該For循環工作完美。非常感謝你。 F。 – Frank