пакетный файл найти, чтобы разобрать ключевые слова - PullRequest
2 голосов
/ 17 марта 2011

У меня есть список слов, хранящихся в текстовом файле с именем blacklist.txt. Я хочу пройти через вывод из другой программы и удалить все строки, содержащие любое из этих слов.

, если я это сделаю:

for /f %%G in (blacklist.txt) find /v /i "%%G" output.txt > newoutput.txt

Я получу результаты только из последней находки

, если я сделаю это:

for /f %%G in (blacklist.txt) find /v /i "%%G" output.txt > output.txt

Я ожидаю, что он обновит файл и запуститзатем найдите на нем систематически отфильтровывая все строки из черного списка.Это, однако, не тот случай, и файл становится пустым после того, как на нем запущена вторая находка ...

Кто-нибудь пытался сделать что-то похожее на это раньше?

Ответы [ 5 ]

2 голосов
/ 17 марта 2011

Вот что я имею в виду.Поместите следующее в командный файл и запустите его:

for /f %%G in (blacklist.txt) do call :finder %%G
goto :EOF

:finder
find /v /i "%1" output.txt > output.tmp
copy output.tmp output.txt

output.txt будет содержать несовпадающие строки.Он также будет несколько раз содержать имя входного файла.Чтобы избежать этого, вы можете использовать команду findstr вместо команды find.

1 голос
/ 18 марта 2011

Хммм. Я отмечаю, что findstr имеет как /v, так и /g:file. Это означает, что вы можете забыть о цикле for.

findstr /v /l /g:blacklist.txt output.txt >tmp
move tmp output.txt
1 голос
/ 17 марта 2011
for /f %%g in (blacklist.txt) do (
    find /v /i "%1" <output.txt >tmp
    move tmp output.txt
)

Обратите внимание, что получение find для чтения со стандартного ввода означает, что вы не получите ложных ---------- output.txt строк, появляющихся на выходе.

1 голос
/ 17 марта 2011

Если вы хотите добавить к файлу, измените > на >>. Также удалите пробел перед именем файла.

for /f %%G in (blacklist.txt) find /v /i "%%G" output.txt >>newoutput.txt
0 голосов
/ 17 марта 2011

используйте >> вместо>
Только не забудьте удалить выходной файл для второго запуска, >> всегда будет добавлять к существующему файлу И вы не можете перенаправить на тот же файл, что и вход, это не поддерживается в cmd.exe под Windows

...