我正在尝试编写Batch脚本来查找文件夹中的txt文件(并在子文件夹中递归显示),这些文件包含这两行连续行(行之间没有空格):
代码“5898”
价格“50”
我试过这个:
Findstr -m /S /C:"Code ""5898""\r\n Price ""50"" *.txt" >> output.txt
但我不知道如何管理回车和换行符。如果我尝试在不使用Price“”50“”的情况下找到字符串,那么如果我试图寻找我需要的两条线,它就能正常工作而没有好结果。
答案 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
在第二个回显之前最后一行,如果有必要的话。