[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

TOP

以下代码经测试有效

@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

TOP

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

TOP

回复 4# qixiaobin0715


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

TOP

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

TOP

返回列表