Board logo

标题: [文本处理] 批处理如何在文本中查找指定内容进行过滤? [打印本页]

作者: xslxslxsl    时间: 2022-2-27 11:19     标题: 批处理如何在文本中查找指定内容进行过滤?

现在有这么一个文本文件,1.txt,以逗号为分隔符,如:
姓名,单位,部门,联系方式
张三,部门一,甲组,A时间
王五,部门二,甲组,A时间
李四,部门一,乙组,B时间
张三,部门二,甲组,A时间
……
现在有一组数据,2.txt,如:
姓名,
张三,
李四,
……
现在打算将2.txt 中的姓名到1.txt中去筛选,形成3.txt,如:
姓名,单位,部门,联系方式
张三,部门一,甲组,A时间
李四,部门一,乙组,B时间
张三,部门二,甲组,A时间
……
谢谢大家的指点!
作者: qixiaobin0715    时间: 2022-2-28 08:39

要善用搜索,好像这类问题的解决,在论坛上有不少:
  1. findstr /l /g:2.txt 1.txt>3.txt
复制代码

作者: hfxiang    时间: 2022-7-14 09:43

以下代码经测试有效

@rem 执行方式:filter.bat 1.txt 2.txt
@echo off
@setlocal enableDelayedExpansion
for /f "delims==" %%z in ('set exist_Name_ 2^>nul') do set "%%z="
for /f "usebackq delims=" %%z in ("%~f2") do set "exist_Name_%%z=1"
for /f "usebackq delims=" %%z in ("%~f1") do (
        set "extN=%%z"
        set "extN1=!extN:*,=!
    call set "extN=%%extN:!extN1!=%%"
        if defined exist_Name_!extN! echo;%%z
)
endlocal
作者: qixiaobin0715    时间: 2022-7-14 10:01

2楼代码有误。讨厌的findstr命令,出现中文会失效。这样处理:
  1. findstr /r /g:2.txt 1.txt>3.txt
复制代码

作者: hfxiang    时间: 2022-7-14 10:53

回复 4# qixiaobin0715


    学会了新的使用findstr的方法,之前/g:一直只能放敢1个参数(因为试过放多个时无效),原来用/r参数就能解决。感谢
作者: qixiaobin0715    时间: 2022-7-14 13:14

回复 5# hfxiang
如果“/g:”后面的文本文件每行开头的首个字符都是ASCII字符,不加/r参数也行。
是使用/l或是使用/r要具体问题具体分析。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2