【问题标题】:batch file find to parse out keywords批处理文件查找以解析出关键字
【发布时间】:2011-03-17 19:16:48
【问题描述】:

我有一个存储在名为 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

我希望它会更新文件并在其上运行下一个查找,系统地过滤掉所有列入黑名单的字符串。然而,情况并非如此,在第二次查找运行后文件变为空白......

以前有没有人尝试过做类似的事情?

【问题讨论】:

    标签: batch-file find text-files


    【解决方案1】:

    这就是我的意思。将以下内容放入批处理文件并运行它:

    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 命令。

    【讨论】:

    • 您不必从find 切换。使用输入重定向:find /v /i "%1" <output.txt > output.tmp.
    【解决方案2】:
    for /f %%g in (blacklist.txt) do (
        find /v /i "%1" <output.txt >tmp
        move tmp output.txt
    )
    

    请注意,让find 从标准输入读取意味着您不会在输出中出现虚假的---------- output.txt 行。

    【讨论】:

    • 这也很漂亮,在我对我正在尝试执行的整个过程进行测试运行后,我将试一试。非常感谢!
    【解决方案3】:

    如果要附加到文件,请将&gt; 更改为&gt;&gt;。另外,删除文件名前的空格。

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

    【讨论】:

    • 问题是我希望它在每次查找后覆盖文件,这样我最终只得到 output.txt 中不包含 blacklist.txt 中任何字符串的行...如果我附加它,我最终会在一个文件和一个比我开始时更大的列表中得到所有不同的查找结果
    【解决方案4】:

    嗯。我注意到findstr 同时拥有/v/g:file。这意味着您可以忘记 for 循环。

    findstr /v /l /g:blacklist.txt output.txt >tmp
    move tmp output.txt
    

    【讨论】:

      【解决方案5】:

      使用 >> 代替 >
      只是不要忘记删除第二次运行的输出文件,>> 将始终附加到现有文件 而且你不能重定向到与输入相同的文件,这在 windows 下的 cmd.exe 中是不支持的

      【讨论】:

      • 因为我正在做一个未找到附加到文件的操作,最终会多次列出 output.txt 中的几乎所有内容....但是知道我无法重定向到与输入相同的文件解释了原因我得到了一个空白文件……当我编辑出每个列入黑名单的单词时,必须有一些方法来缩小我的列表。
      • 在'for'中使用'call'语句怎么样,在被调用的块中你找到一个临时文件,然后将临时文件移动到输入文件,所以下一次迭代对前一个的结果进行操作。 (是的,我按回车键快速...)
      • 是的......对不起,我的问题有点模糊,否则它没有乐趣。 :p 但这很有效,感谢您的帮助!!...现在我只需要找出如何让 find 每次都在文件顶部搜索的文件名不写...
      • 旁注:Unix 也不支持它。覆盖输入文件通常是个坏主意。
      • 除非你知道自己在做什么;)
      猜你喜欢
      • 2021-02-24
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多