【问题标题】:Batch script to find files that contains two consecutive lines用于查找包含两个连续行的文件的批处理脚本
【发布时间】:2016-10-13 15:03:15
【问题描述】:

我正在尝试编写批处理脚本以在包含这两行 连续 行(行之间没有空格)的文件夹(并递归地在子文件夹中)中查找 txt 文件:

代码“5898”

价格“50”

我试过这个:

Findstr -m /S /C:"Code ""5898""\r\n Price ""50"" *.txt" >> output.txt

但我不知道如何管理回车和换行。如果我尝试在不使用 Price ""50"" 的情况下查找字符串,它可以正常工作,而如果我尝试查找我需要的两行则没有好的结果。

【问题讨论】:

  • 经过多次编辑,您的示例代码仍然没有显示文件夹、递归搜索、包含字符串 Code "5898" 的行或任何试图寻找包含 Price "50" 的行的尝试。我认为您最好尝试更全面地解释您的要求。
  • 你是对的。我修正了很多观点:文件夹不是很重要。我将从要开始搜索的文件夹中运行命令。
  • 这将帮助您将来使用 FINDSTR。 stackoverflow.com/questions/8844868/…

标签: regex batch-file command-line


【解决方案1】:

请不要更改此文件,这样做可能会导致它无法工作。

@Echo Off
SetLocal EnableDelayedExpansion
For /F %%A In ('Copy /Z "%~dpf0" Nul') Do Set "CR=%%A"
Set LF=^


Dir/B/S/A-D|Findstr/RNF:"/" /C:"Code \"5898\"!CR!*!LF!Price \"50\"">"%tmp%\$_.tmp"
>Output.txt (   For /F "UseBackTokens=1-3 Delims=:" %%A In ("%tmp%\$_.tmp") Do (
    Echo("%%A:%%B"))
Del "%tmp%\$_.tmp"

只输出文件名,(递归搜索时为奇数):

@Echo Off
SetLocal EnableDelayedExpansion
For /F %%A In ('Copy /Z "%~dpf0" Nul') Do Set "CR=%%A"
Set LF=^


Dir/B/S/A-D|Findstr/RNF:"/" /C:"Code \"5898\"!CR!*!LF!Price \"50\"">"%tmp%\$_.tmp"
>Output.txt (   For /F "UseBackTokens=1-3 Delims=:" %%A In ("%tmp%\$_.tmp") Do (
    Echo("%%~nxB"))
Del "%tmp%\$_.tmp"

您现在可以从技术上将令牌更改为 1-2,但我将保持原样,以便在倒数第二行的回显之前再次重新实施行号检查 If %%C==1如有必要。

【讨论】:

  • 成功了,谢谢!!!我将输出重定向到一个文件中,在 Echo 之后添加一个 >> output.txt。如果我只在文件中打印没有路径的文件名呢?
  • 如果我有一个价格为“5”的文件,这个脚本可以工作,但它不应该......
  • 我已经更新了答案以合并您的输出文件和仅文件 nmae 要求。至于您对Price "5" 的问题,这可能需要我花费很长时间进行调试,而无法真正访问足够的资源进行测试。
  • 我明白了。但对于其他读过的人,我不得不说它不能正常工作,因为 Price 中的每个字符串都会返回文件。
  • Price "5" 问题的一个选项可能是忽略 FindStr /C 选项。我已将其纳入答案中。
猜你喜欢
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
相关资源
最近更新 更多