批处理脚本,用于查找包含两个连续行的文件

时间:2016-10-13 15:03:15

标签: regex batch-file command-line

我正在尝试编写Batch脚本来查找文件夹中的txt文件(并在子文件夹中递归显示),这些文件包含这两行连续行(行之间没有空格):

代码“5898”

价格“50”

我试过这个:

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

但我不知道如何管理回车和换行符。如果我尝试在不使用Price“”50“”的情况下找到字符串,那么如果我试图寻找我需要的两条线,它就能正常工作而没有好结果。

1 个答案:

答案 0 :(得分:0)

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

@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在第二个回显之前最后一行,如果有必要的话。