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

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

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

想请教一下各位老师,写一个bat
aaa.txt内容
王新然
邹天悦
王君
王新然
bbb.txt内容
王新然
邹天悦
王君
王君泽
王君如
想实现的:如果aaa.txt中的名字在bbb.txt中存在,将存在的保存到ccc.txt中

  1. findstr /r /g:aaa.txt bbb.txt>ccc.txt
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor

findstr够强大,原来参数/G:file是这么用的。又学了一招。

TOP

回复 2# ivor


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

评分人数

    • ivor: 结果都一样技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

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

TOP

回复 5# qixiaobin0715


    这样就正确了,你要的只是交集
  1. findstr /r /x /g:aaa.txt bbb.txt
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

回复 2# ivor


aaa.txt内容改成这样就会发现顺序不同结果不同
王新
邹天悦
王君
王新然
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# qixiaobin0715


    是的,如果每行的字符有包含关系,都会输出。我要的是王新就输出王新,不要王新然

TOP

6楼代码正解,参数/be和/x在这里应当没什么不同。

TOP

回复 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岁 学生
……。…。…。…。……
为什么马黑黑和王新一同一行了?

TOP

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
复制代码

TOP

回复 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

TOP

返回列表