Board logo

标题: [文本处理] [已解决]批处理怎样按姓名列表,到另一个文件找到完全一样的保存起来 [打印本页]

作者: gcbgczhang    时间: 2020-11-20 16:55     标题: [已解决]批处理怎样按姓名列表,到另一个文件找到完全一样的保存起来

本帖最后由 gcbgczhang 于 2021-7-31 14:20 编辑

想请教一下各位老师,写一个bat
aaa.txt内容
王新然
邹天悦
王君
王新然
bbb.txt内容
王新然
邹天悦
王君
王君泽
王君如
想实现的:如果aaa.txt中的名字在bbb.txt中存在,将存在的保存到ccc.txt中
作者: ivor    时间: 2020-11-20 17:27

  1. findstr /r /g:aaa.txt bbb.txt>ccc.txt
复制代码

作者: qixiaobin0715    时间: 2020-11-20 17:31

回复 2# ivor

findstr够强大,原来参数/G:file是这么用的。又学了一招。
作者: Batcher    时间: 2020-11-20 17:58

回复 2# ivor


看楼主的要求应该是反过来这样吧:
  1. findstr /r /g:bbb.txt aaa.txt>ccc.txt
复制代码

作者: qixiaobin0715    时间: 2020-11-20 19:25

回复 4# Batcher
好像关键不在于谁前谁后的问题,比如放在前面的文本中有“王君”,后面文本所有“王君*”都会输出。应当加上参数“/be”才对。
作者: ivor    时间: 2020-11-20 19:28

回复 5# qixiaobin0715


    这样就正确了,你要的只是交集
  1. findstr /r /x /g:aaa.txt bbb.txt
复制代码

作者: Batcher    时间: 2020-11-20 21:36

回复 2# ivor


aaa.txt内容改成这样就会发现顺序不同结果不同
王新
邹天悦
王君
王新然
作者: gcbgczhang    时间: 2020-11-21 10:20

回复 5# qixiaobin0715


    是的,如果每行的字符有包含关系,都会输出。我要的是王新就输出王新,不要王新然
作者: qixiaobin0715    时间: 2020-11-21 10:41

6楼代码正解,参数/be和/x在这里应当没什么不同。
作者: gcbgczhang    时间: 2020-11-21 11:09

回复 6# ivor


    谢谢,老师,你这个可以实现我上面的。那么现在有一个另一个问题,就是通过索引在库里找出全文件内容。
aaa.txt内容,这个是索引内容。
王新
刘东
马黑黑
王新新
bbb.txt内容。这个是库内容,
王新新   8岁    学生
马黑黑   10岁   学生 
王新新         9岁     学生
王新            11岁   学生
……………………………………。
我要按aaa的名字,在bbb中找出来,输出来和bbb一样的格式。
我用for, 找出来,王新会输出bbb中王新和王新新的信息,只能将输出来的再用您的命令再对比一下就可以唯一匹配呢
我用这个
for /f "delims=*" %%i in (aaa.txt) do  findstr  "%%i" bbb.txt >>ccc.txt
findstr /r /x /g:ccc.txt bbb.txt >77.txt
ccc.txt出来
王新新 8岁 学生
王新新 9岁 学生
王新 11岁 学生马黑黑 10岁 学生 
王新新 8岁 学生
王新新 9岁 学生
……。…。…。…。……
为什么马黑黑和王新一同一行了?
作者: qixiaobin0715    时间: 2020-11-21 11:57

aaa.txt文件姓名列表行首行尾不要有空格,bbb.txt库文件姓名和年龄之间最少有一个空格。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f %%a in (aaa.txt) do (
  4.     findstr /c:"%%a " bbb.txt
  5. ))>ccc.txt
  6. pause
复制代码

作者: gcbgczhang    时间: 2020-11-21 12:42

回复 11# qixiaobin0715


    确实是有空格的问题,上面的列表是我自己打的,我用电子表格处理一下,再弄就好了。
@echo off
setlocal enabledelayedexpansion
(for /f %%a in (aaa.txt) do (
    findstr /c:"%%a" bbb.txt
))>ccc.txt

findstr /r /x /g:ccc.txt bbb.txt >77.txt




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