【问题标题】:Find 2 values in file with command-line | CMD使用命令行在文件中查找 2 个值 |命令
【发布时间】:2012-06-29 06:15:22
【问题描述】:

下面的代码允许我使用命令行 (CMD) 在我的所有文件中找到“错误”一词。

find /c "error" C:\MyFiles\*.txt

但我希望它同时查找单词“error”和“warning”。

所以我想把这两行作为 1 行命令。

find /c "error" C:\MyFiles\*.txt
find /c "warning" C:\MyFiles\*.txt

我不想看到 2 个结果集。

【问题讨论】:

    标签: command-line batch-file cmd


    【解决方案1】:

    这应该可以工作(FINDSTR 在空格处分割搜索字符串,因此它会查找任一单词)。

    findstr "error warning" C:\MyFiles\*.txt
    

    这个等价的搜索应该是这样的:

    findstr /c:"error" /c:"warning" C:\MyFiles\*.txt
    

    但是,有这个错误:Why doesn't this FINDSTR example with multiple literal search strings find a match?。我不确定上述搜索是否符合指定错误可能何时影响结果的标准。 (我不确定搜索字符串之间是否有足够的重叠。)但安全总比抱歉好。

    您可以通过使搜索不区分大小写(不确定是否满足您的要求)来消除错误的可能性:

    findstr /i "error warning" C:\MyFiles\*.txt
    

    或者您可以将搜索字符串转换为正则表达式。在您的情况下,这很容易实现,因为在您的搜索字符串中没有需要转义的正则表达式元字符。

    findstr /r "error warning" C:\MyFiles\*.txt
    

    【讨论】:

      【解决方案2】:

      在您的情况下,您可以简单地使用管道来实现 AND 运算符。

      find /c "error" C:\MyFiles\*.txt | find /c "warning"
      

      根据您的评论,您需要 OR 运算符

      在这种情况下,我将使用 findstr 进行搜索并使用 find /c 进行计数

      findstr "error warning" C:\MyFiles\*.txt | find /c /v ""
      

      【讨论】:

      • 这确实有效,但如果我在同一个文件中有 4 条“警告”消息和 2 条“错误”消息。它只显示 4 的计数。由于 4 + 2,它必须显示 6 的计数。
      • 上面的代码只显示了包含两个单词的行。典型的AND。但您似乎需要OR 解决方案。
      • 谢谢,正确,但我仍然需要指定文件路径 C:\MyFiles*.txt
      • 它适用于我和一个小示例文件,您可以发布数据文件的 sn-p
      • 如果我让代码只查看 1 个文件,其中只有单词 error 仍然不起作用,嘿。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2011-08-07
      • 1970-01-01
      • 2023-02-16
      相关资源
      最近更新 更多