找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21359|回复: 5

[文本处理] 批处理如何在文本中查找指定内容进行过滤?

[复制链接]
发表于 2022-2-27 11:19:28 | 显示全部楼层 |阅读模式
现在有这么一个文本文件,1.txt,以逗号为分隔符,如:
姓名,单位,部门,联系方式
张三,部门一,甲组,A时间
王五,部门二,甲组,A时间
李四,部门一,乙组,B时间
张三,部门二,甲组,A时间
……
现在有一组数据,2.txt,如:
姓名,
张三,
李四,
……
现在打算将2.txt 中的姓名到1.txt中去筛选,形成3.txt,如:
姓名,单位,部门,联系方式
张三,部门一,甲组,A时间
李四,部门一,乙组,B时间
张三,部门二,甲组,A时间
……
谢谢大家的指点!
发表于 2022-2-28 08:39:57 | 显示全部楼层
要善用搜索,好像这类问题的解决,在论坛上有不少:
  1. findstr /l /g:2.txt 1.txt>3.txt
复制代码
发表于 2022-7-14 09:43:24 | 显示全部楼层
以下代码经测试有效

@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
发表于 2022-7-14 10:01:30 | 显示全部楼层
2楼代码有误。讨厌的findstr命令,出现中文会失效。这样处理:
  1. findstr /r /g:2.txt 1.txt>3.txt
复制代码
发表于 2022-7-14 10:53:24 | 显示全部楼层
回复 4# qixiaobin0715


    学会了新的使用findstr的方法,之前/g:一直只能放敢1个参数(因为试过放多个时无效),原来用/r参数就能解决。感谢
发表于 2022-7-14 13:14:11 | 显示全部楼层
回复 5# hfxiang
如果“/g:”后面的文本文件每行开头的首个字符都是ASCII字符,不加/r参数也行。
是使用/l或是使用/r要具体问题具体分析。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:28 , Processed in 0.017023 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表