[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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,然后让我自己输入,输入后进行匹配第四个,赋值给变量。

回复 1# 帝尊


    请把txt和ini打包上传到网盘,以便测试代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher



https://www.123pan.com/s/AYXqVv-7L4t.html

谢谢大佬。

TOP

回复 3# 帝尊


    不这个例子最后想得到什么结果呢?我是真没怎么听明白你的描述

TOP

没看懂

QQ 20147578

TOP

回复 3# 帝尊


    我使用PZ.txt里面的字符串手工去PZ.ini里面搜索,没有匹配的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# czjt1234

回复 4# pd1

就是txt文件内有一些数据是在ini文件内可以匹配的,比如txt内有8BTK这个字符串,然后与ini文件进行匹配,匹配成功以后把匹配的那一行=最后的字符串赋值给一个变量。

例如:INI文件内容是这个。
X48=2ABP=MNOP=QRSTUVWXYZ.ABCDEFGH 123 XYZWVUTS
txt文件内容有一行是
X48或者是2ABP。
匹配成功后把QRSTUVWXYZ.ABCDEFGH 123 XYZWVUTS赋值给一个变量

再比如:
F84=6IJK=QRST=VWXYZABCD.VWXYZAB 789 QWERTYUI
F84=8KYP=QRST=VWXYZABCD.VWXYZAB 567 QWERTYUI
F84匹配了两次,但是F84后面有不同的,那么就看txt文件内有哪个可以与6IJK或者8KYP匹配,成功后把对应的最后一组字符赋值给变量
再比如:

例如:INI文件内容是这个。
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 899 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 890 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 456 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 789 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 234 HIGEHKHL
只有最后的是不一样的,前面都一样,那么就提示有哪些是一样的。分别是什么。

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

回复 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

回复 9# hfxiang


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

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


给一个纯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

回复 11# qixiaobin0715


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

TOP

回复 12# aloha20200628


    感谢大佬,明天去试试。

TOP

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

TOP

返回列表