标题: [文本处理] [已解决]批处理如何在一个列表中找另一个列表中存在的? [打印本页]
作者: gcbgczhang 时间: 2020-11-21 18:36 标题: [已解决]批处理如何在一个列表中找另一个列表中存在的?
本帖最后由 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
...
谢谢各位老师啦
作者: gcbgczhang 时间: 2020-11-21 18:59
@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完全相相等再输出呢,
作者: Batcher 时间: 2020-11-21 19:06
回复 1# gcbgczhang - @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in ('type "aaa.txt"') do (
- set /p str=
- if "%%i" equ "!str!" (
- echo,%%i
- ) else (
- echo,
- )
- ))<"bbb.txt" >"ccc.txt"
复制代码
作者: Batcher 时间: 2020-11-21 19:08
回复 2# gcbgczhang
findstr命令使用某些参数可以实现精确匹配,参考:
http://bbs.bathome.net/thread-24-1-1.html
http://bbs.bathome.net/thread-14682-1-1.html
但是不建议在你这个代码里面使用,因为 for 循环内部重复调用 findstr 命令会让代码执行效率变得比较差。
作者: qixiaobin0715 时间: 2020-11-22 07:11
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (bbb.txt) do set "#%%i=true"
- (for /f "delims=" %%i in (aaa.txt) do (
- if defined #%%i (
- echo,%%i
- ) else (
- echo,
- )
- ))>ccc.txt
复制代码
作者: gcbgczhang 时间: 2020-11-23 10:34
回复 3# Batcher
是啊,我有几个用了finstr 加for ,超级慢,因为我有30万条数据
作者: Batcher 时间: 2020-11-23 11:01
回复 6# gcbgczhang
试试3楼、5楼代码分别需要多少时间吧,如果需要进一步优化再继续讨论。
作者: terse 时间: 2020-11-25 14:03
直接finstr 不加for
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |