Удалить строку в текстовом файле на основе токена - PullRequest
1 голос
/ 24 августа 2011

У меня есть текстовый файл 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,,,,,

Thisмоя идея:

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, это сработает, но удалит только последнюю найденную строку токена.Благодарю.Frank

1 Ответ

2 голосов
/ 24 августа 2011

Я думаю, что вы должны остаться с текущими изменениями, когда вы выводите на 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)

UPDATE

Я изменил обе команды НАЙТИ, добавив < до full_add.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
)

Отступы совершенно необязательны, конечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...