我有一个存储在名为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
我希望它能够更新文件并运行下一个查找系统地过滤掉所有列入黑名单的字符串。然而情况并非如此,并且在第二次查找运行后文件变为空白...
有没有人尝试过类似的事情?
答案 0 :(得分:2)
这就是我的意思。将以下内容放在批处理文件中并运行它:
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 :(得分:1)
如果您要附加到该文件,请将>
更改为>>
。另外,删除文件名前的空格。
for /f %%G in (blacklist.txt) find /v /i "%%G" output.txt >>newoutput.txt
答案 2 :(得分:1)
for /f %%g in (blacklist.txt) do (
find /v /i "%1" <output.txt >tmp
move tmp output.txt
)
请注意,从标准输入读取find
意味着您不会在输出中出现虚假的---------- output.txt
行。
答案 3 :(得分:1)
嗯。我注意到findstr
同时包含/v
和/g:file
。这意味着您可以忘记for循环。
findstr /v /l /g:blacklist.txt output.txt >tmp
move tmp output.txt
答案 4 :(得分:0)
使用&gt;&gt;而不是&gt;
只是不要忘记删除第二次运行的输出文件,&gt;&gt;将始终附加到现有文件
并且您无法重定向到与输入相同的文件,这在Windows