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

[文本处理] [已解决]批处理如何在一个列表中找另一个列表中存在的?

[复制链接]
发表于 2020-11-21 18:36:34 | 显示全部楼层 |阅读模式
本帖最后由 gcbgczhang 于 2021-7-31 14:19 编辑

请老师各位老师一个问题,
aaa.txt内容
aaasssss
aass11
ddssaa
ss00
bbbbb
...
bbb.txt内容
aaasssss
aass111
ddssaa
ss000
bbbbb

...
想实现的:严格按aaa内容每行到bbb里去找,找到了就输入ccc.txt,找不到就空一行。
得到的ccc.txt内容如下
aaasssss

ddssaa

bbbbb
...
谢谢各位老师啦
 楼主| 发表于 2020-11-21 18:59:51 | 显示全部楼层
@echo off
setlocal enabledelayedexpansion
for /f %%i in (aaa.txt) do (
findstr "%%i" bbb.txt >>ccc.txt & findstr "%%i" bbb.txt || echo. >>ccc.txt
)
echo 完成
pause
我这个不能处理ss00与ss000的绝对匹配,有什么方法可以将%%i比较一下findstr "%%i" bbb.txt完全相相等再输出呢,
发表于 2020-11-21 19:06:28 | 显示全部楼层
回复 1# gcbgczhang
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in ('type "aaa.txt"') do (
  4.     set /p str=
  5.     if "%%i" equ "!str!" (
  6.         echo,%%i
  7.     ) else (
  8.         echo,
  9.     )
  10. ))<"bbb.txt" >"ccc.txt"
复制代码
发表于 2020-11-21 19:08:22 | 显示全部楼层
回复 2# gcbgczhang


findstr命令使用某些参数可以实现精确匹配,参考:
http://bbs.bathome.net/thread-24-1-1.html
http://bbs.bathome.net/thread-14682-1-1.html

但是不建议在你这个代码里面使用,因为 for 循环内部重复调用 findstr 命令会让代码执行效率变得比较差。
发表于 2020-11-22 07:11:37 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (bbb.txt) do set "#%%i=true"
  4. (for /f "delims=" %%i in (aaa.txt) do (
  5.     if defined #%%i (
  6.         echo,%%i
  7.     ) else (
  8.         echo,
  9.     )
  10. ))>ccc.txt
复制代码
 楼主| 发表于 2020-11-23 10:34:33 | 显示全部楼层
回复 3# Batcher


     是啊,我有几个用了finstr 加for ,超级慢,因为我有30万条数据
发表于 2020-11-23 11:01:54 | 显示全部楼层
回复 6# gcbgczhang


    试试3楼、5楼代码分别需要多少时间吧,如果需要进一步优化再继续讨论。
发表于 2020-11-25 14:03:43 | 显示全部楼层
直接finstr  不加for
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 20:51 , Processed in 0.038428 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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