Board logo

标题: [文本处理] DOS BAT怎么比较两个字符串根据数量的多少判定是否打印到新的txt中? [打印本页]

作者: dm990436    时间: 2022-4-25 16:29     标题: DOS BAT怎么比较两个字符串根据数量的多少判定是否打印到新的txt中?

本帖最后由 dm990436 于 2022-4-27 14:39 编辑

有2个txt文件,
1.txt中有
a b c d e
b f g s z
b g u l m
...
2.txt中有
a c d g l
a k r m v
c e q l n
...
需求:
预先设定重复个数2或者3个的打印出来。
1.txt中的每一行要跟2.txt中的每一行做比较,取最大的相同数量,譬如1.txt中的a b c d e逐行跟2.txt的每一行比较,只要有一个满足条件就打印出来:
a c d g l 重复3个,满足条件
a k r m v 重复1个,不满足
c e q l n 重复c e,2个,满足条件。则打印出1.txt中a b c d e该行

如b f g s z 循环2.txt的每一行,
a c d g l 重复1个,不满足条件
a k r m v 重复0个,不满足
c e q l n 重复0个,不满足。
b f g s z 不满足2-3个重复个数,则不打印1.txt中b f g s z该行

求大神指点如何写。。。。
作者: Batcher    时间: 2022-4-25 17:32

回复 1# dm990436


a b c d e
a b c m v 重复1个?规律是啥呢,每太看懂。
作者: cutebe    时间: 2022-4-25 21:12

  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f "delims=" %%1 in (1.txt)do (
  4. call :cmp "%%1"
  5. )
  6. pause
  7. goto :eof
  8. :cmp str1 mstr
  9. SetLocal
  10. for %%a in (%~1)do (
  11. set _%%a=1
  12. )
  13. for /f "delims=" %%2 in (2.txt)do (
  14. set lflag=0
  15. for %%b in (%%2)do (
  16. if defined _%%b set/alflag+=1
  17. )
  18. if !lflag! equ 2 echo/%~1&&goto :endc
  19. if !lflag! equ 3 echo/%~1&&goto :endc
  20. )
  21. :endc
  22. EndLocal
复制代码

作者: dm990436    时间: 2022-4-26 16:55

本帖最后由 dm990436 于 2022-4-26 16:57 编辑

回复 2# Batcher


   不好意思,写错了,是a k r m v 大概的意思就是比较有几个相同的,然后跟条件相比较,满足的话打印。
作者: Batcher    时间: 2022-4-26 17:00

回复 4# dm990436


    请编辑一下顶楼的需求吧
作者: dm990436    时间: 2022-4-27 14:40

回复 5# Batcher


    已修改




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