批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

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

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

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

ddssaa

bbbbb
...
谢谢各位老师啦

@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完全相相等再输出呢,

TOP

回复 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"
复制代码
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

回复 2# gcbgczhang


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

但是不建议在你这个代码里面使用,因为 for 循环内部重复调用 findstr 命令会让代码执行效率变得比较差。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

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

TOP

回复 3# Batcher


     是啊,我有几个用了finstr 加for ,超级慢,因为我有30万条数据

TOP

回复 6# gcbgczhang


    试试3楼、5楼代码分别需要多少时间吧,如果需要进一步优化再继续讨论。
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,不用找我要支付宝或微信账号。如果一定要给,请到微信群给大家发红吧。

TOP

直接finstr  不加for

TOP

返回列表