(大神在哪里)批处理 实现两个文本文件内容的对比(包含通配符)
有文件A和文件B文件A是对比字符串文件,文件B是用来比较后修改的文件A的内容ds.pandawork.net*.dev.netds.*.netds.**B的内容#125....
有文件A和文件B
文件A是对比字符串文件 ,文件B是用来比较后修改的文件
A的内容
ds.pandawork.net
*.dev.net
ds.*.net
ds.*
*
B的内容
#125.222.219.147 ds.dev.net
#125.222.219.147 sso.dev.net
#125.222.219.147 ml.dev.net
#125.222.219.147 edu.dev.net
#125.222.219.147 solr.dev.net
#125.222.219.147 db.ds.dev.net #数据库域名
#125.222.219.147 pui.dev.net
#125.222.219.147 red5.dev.net
#125.222.219.147 static.ds.dev.net
#125.222.219.147 static.ds.pandawork.net
要求把B文件中 包含匹配A任何字符串的那行文本删除
有一种情况就是,如果要查找的ds.pandawork.net ,
#125.222.219.147 static.ds.pandawork.net 这种情况不能删除那一行,也就是要全字匹配,但是又要支持通配符 这样就导致findstr /ivg:2.txt 1.txt>3.txt 这种方法不能用了 展开
文件A是对比字符串文件 ,文件B是用来比较后修改的文件
A的内容
ds.pandawork.net
*.dev.net
ds.*.net
ds.*
*
B的内容
#125.222.219.147 ds.dev.net
#125.222.219.147 sso.dev.net
#125.222.219.147 ml.dev.net
#125.222.219.147 edu.dev.net
#125.222.219.147 solr.dev.net
#125.222.219.147 db.ds.dev.net #数据库域名
#125.222.219.147 pui.dev.net
#125.222.219.147 red5.dev.net
#125.222.219.147 static.ds.dev.net
#125.222.219.147 static.ds.pandawork.net
要求把B文件中 包含匹配A任何字符串的那行文本删除
有一种情况就是,如果要查找的ds.pandawork.net ,
#125.222.219.147 static.ds.pandawork.net 这种情况不能删除那一行,也就是要全字匹配,但是又要支持通配符 这样就导致findstr /ivg:2.txt 1.txt>3.txt 这种方法不能用了 展开
1个回答
展开全部
这问题确实很麻烦,而不带“通配符”及不用“全匹配”时却相当简捷,,我也不是什么大神,写了一个试试(那个a.txt 不会太多行数吧)
@echo off&setlocal enabledelayedexpansion
set "f1=a.txt"
set "f2=b.txt"
set "s=[^.][^.]*"
set ss="%%b" "%%c" "%%d" "%%e" "%%f" "%%g" "%%h"
for /f %%i in ('type %f1%')do (
set "h=y%%iy"
for /f "tokens=1-8 delims=*" %%a in ("!h:.=\.!") do (
set "q=%%a"
set "q=[1-9][0-9]*:!q:~1!"
for %%j in (%ss%)do if not %%j=="" set "q=!q!!s!%%~j"
set "sn=!sn! !q:~,-1!"
))
(for /f "tokens=2" %%i in ('type "%f2%"')do (
set/a n+=1
set #!n!=y
echo;!n!:%%i))>c.txt
for /f "delims=:" %%i in ('findstr/ix "!sn!" c.txt')do set "#%%i="
(for /f "delims=" %%i in ('type "%f2%"')do (
set/a m+=1
if defined #!m! echo;%%i
))>c.txt
:: move c.txt "%f2%"
pause
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询