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

[文本处理] 批处理怎样实现两个文件的字符匹配?

txt文件内可能是XX1匹配,也可能是XX2匹配,也可能都匹配,但是也可能匹配多行。
下面的数据是ini文件的数据。
XX1=XX2=XX3=XX4
XX1=XX2=XX3=XX5
XX1=XX2=XX3=XX6
XX1=XX2=XX3=XX7
AA1=AA2=AA3=AA4
BB1=BB2=BB3=BB4
匹配两个文件相同的字符。
先判定ini文件内的字符与txt文件内的字符有几个相同的。
先判定XX1有几个符合的,有多个符合的就去判定XX2有几个符合的,如果还是有多个符合的那么就给出显示XX3,最好是能有选择。
如果无法给出选择,那么就给个提示提示就是XX3,然后让我自己输入,输入后进行匹配第四个,赋值给变量。

在本论坛混,重要的是要有分享精神和感恩之心。不要光顾自己高兴,难道不想给12楼的点个赞,把自己完善后的代码分享出来吗。

TOP

回复 19# qixiaobin0715


    12楼的大佬给了代码了。自己完善了下,很好用。

TOP

本帖最后由 qixiaobin0715 于 2023-8-20 08:30 编辑

可能我理解能力有限,到现在还云里雾里的,还是留待大佬们来解决吧。

TOP

回复 17# qixiaobin0715
因为有多个符合的,但是XX4的数据不同啊。

TOP

回复 16# 帝尊
引用顶楼的“有多个符合的就去判定XX2有几个符合的。”
好奇怪。既然都有就不需要再去判断是否符合的了。

TOP

回复 15# qixiaobin0715


    都有的。不存在没有的情况。

TOP

回复 13# 帝尊
看样子你还是没理解我的意思,我只是举个例子而已,主要是说你逻辑上没表达清楚。
顶楼和7楼似乎有矛盾的地方,也可能是我理解能力有限,再举个例子吧(只是举例,这不是重点)。
你在顶楼是这样说的:“先判定XX1有几个符合的,有多个符合的就去判定XX2有几个符合的”。
这里的符合是何意?是说在txt文件中既含有XX1又含有XX2?那么txt中含有xx1而不含xx2如何处理?
所以我的主要意思是,你自己要先把逻辑理清楚。

TOP

回复 12# aloha20200628


    感谢大佬,明天去试试。

TOP

回复 11# qixiaobin0715


    如果是这样的话,也给出提示好了。让我选择用哪一个。

TOP


给一个纯P方案》先对pz.txt逐行首尾去空格,再用findstr字面量匹配,最后去重...
  1. @echo off
  2. for /f "tokens=*" %%s in (pz.txt) do (
  3. for /f "tokens=4 delims==" %%t in ('findstr /lc:"%%~nxs" pz.ini') do if "%%~t" neq "" if not defined #%%~t (set #%%~t=1 & echo,%%t)
  4. )
  5. pause &exit/b
复制代码

TOP

本帖最后由 qixiaobin0715 于 2023-8-16 10:35 编辑

逻辑上还是未表达清楚,比如下面一组内容。txt文件中包含W70、X48、7UHK、9UHK。
1.第1-3行含有W70,而第3行中9UHK与第1、2行中7UHK不同;
2.第4行中7UHK与第1、2行中又相同。
以上情况该如何处理。
这里只是举一个例子而已。
  1. W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 899 HIGEHKHL
  2. W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 890 HIGEHKHL
  3. W70=9UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 456 HIGEHKHL
  4. X48=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 789 HIGEHKHL
复制代码

TOP

回复 9# hfxiang


    谢谢,可以不适用第三方吗?批处理里面有powershell命令也可以的。

TOP

回复 3# 帝尊
用gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe )实现如下:
  1. awk "NR==FNR{if(NF){for(i=1;i<=NF;i++)a[++N]=$i}next}{for(i=1;i<=N;i++)if($0~a[i]){print;next}}" pz.txt pz.ini
复制代码

TOP

回复 6# Batcher


    有的,
  1. Date
  2. 78.huhk
  3. Version
  4. F84
  5. VID
  6. 6IJK
  7. BIK
  8. 12345678
复制代码
  1. F84=6IJK=QRST=VWXYZABCD.VWXYZAB 789 QWERTYUI
  2. F84=6IJK=QRST=VWXYZABCD.VWXYZAB 567 QWERTYUI
  3. F84=6IJK=QRST=VWXYZABCD.VWXYZAB 274 QWERTYUI
  4. F84=6IJK=QRST=VWXYZABCD.VWXYZAB 8735 QWERTYUI
  5. F84=6IJK=QRST=VWXYZABCD.VWXYZAB 2576 QWERTYUI
复制代码
F84相同 6IJK也相同。

TOP

返回列表