批处理比对多文本文件的 找出相同内容另存为一个文本

大家好。我想达到如下效果。不知道能否用批处理实现?某目录下有几个文本文件,希望通过批处理BAT进行文本中字节的比较文本1是基本文本。文本1的每行的第二栏是需要和别的文本比... 大家好。我想达到如下效果。不知道能否用批处理实现?

某目录下有几个文本文件, 希望通过批处理BAT 进行文本中字节的比较文本1是基本文本。文本1的每行的第二栏是需要和别的文本比对的变量文本一1 101101 名字1 1 x x x x2 102102 名字2 1 x x x x3 903903 名字3 1 x x x x 文本二
1 1012 名字1 1 x x x x2 102102 名字2 1 x x x x3 1032 名字3 1 x x x x4 903903 名字三3 1 xddd x x x文本三1 1013 名字1 1 x x x x2 102102 名字2 1 x x x x3 1033 名字3 1 x x x x4 903903 名字3 1 xddd x x x 1)比较文本1每行的第二栏是否同时出现在别的文本里。如果同时出现在同目录下别的文本中。则提取这个字段存入一个文本比如 文本1中的102102 903903 同时出现在文本2和文本3这就是符合要求的字段提取出来另存一个文本
结果文本显示如下102102903903
2)将结果文本中的内容稍微修改一下如果数字大于500000则在该数字前加+否则加-所以最后的效果是这样的
结果文本的最后效果-102102+903903

谢谢
展开
 我来答
jd08139
2013-12-25 · TA获得超过3733个赞
知道大有可为答主
回答量:2174
采纳率:66%
帮助的人:2822万
展开全部
@echo off
set "bf=1.txt"
(for /f "usebackq tokens=1-2*" %%a in ("%bf%") do (
findstr /r "%%b\>" "D:\新建文件夹\*.txt" >nul&&if %%b gtr 500000 (echo +%%b) else echo -%%b))>>result.txt
pause

将要用于查找的文件(1.txt)和批处理放在一起,也可设置1.txt路径.将1.txt和要查找的文件分开存放,这样代码执行更有效率.下面的代码可以直接将批处理和要查找的文件放在一起使用.

@echo off&setlocal enabledelayedexpansion
set "bf=1.txt"
(for /f "usebackq tokens=1-2*" %%a in ("%bf%") do (set n=
for /f "delims=" %%i in ('dir /a-d/b *.txt^|findstr /vr "%bf%\>"') do (
findstr /r "%%b\>" "%%i" >nul&&(set /a n+=1))
if !n! gtr 0 (if %%b gtr 500000 (echo +%%b) else echo -%%b)))>>result.txt
pause
追问
谢谢答复。

我运行后发觉 |findstr /vr "%bf%" 这一句并没有起作用。也就是1.txt并没有被排除。
这是为什么??????
vvipwolf1
2013-12-25
知道答主
回答量:16
采纳率:0%
帮助的人:11.4万
展开全部
批处理可能难以实现,建议导入EXCEL用函数处理。如果这类工作固定模式频繁重复,找人写个小程序,或在ACESS中处理。
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
朴素且可爱灬小喵1
2013-12-25 · TA获得超过2902个赞
知道大有可为答主
回答量:1713
采纳率:89%
帮助的人:505万
展开全部
刚完成,我按您的描述做了3个txt,1.txt、2.txt、3.txt,把下面的批处理存为findstr.bat,放在同一个文件夹下,运行就行了。我在XP下测试通过了。
@echo off
@setlocal ENABLEDELAYEDEXPANSION
@for /f "tokens=2 delims= " %%i in (1.txt) do (
@find "%%i" 2.txt >nul
@set r=!errorlevel!
@find "%%i" 3.txt >nul
@set /a r+=!errorlevel!
@if !r!==0 (
@set f=%%i
@set f=!f:~0,1!@if !f! GEQ 5 (@echo +%%i) else (@echo -%%i)
)
)
@endlocal
@pause
结果应该完全符合您的要求,不过我假定各列之间是用空格分隔的。
更多追问追答
追问
谢谢答复。我在win7下执行。返回的结果是-101101,如果倒数第5行改成@if !f! gtr  500000   (@echo +%%i >>result.txt)  else @echo -%%i>>result.txt 就输出正确了
冒昧问一下。能否改成N个文件对比。也就是不是固定的三个文件。只要是在目录下有文件。有几个文件就对比几个。???该如何改?
追答
对于您的追问,可以这样:
1、所有要比较的目标文件最好有个统一的命名方式,比如c2.txt、c3.txt,这样方便文件筛选;
2、修改程序中的比较段,就是第一层for里面的内容,再加一层for就行了,改写后的批处理是这样:
@echo off
@setlocal ENABLEDELAYEDEXPANSION
@for /f "tokens=2 delims= " %%i in (1.txt) do (
@set r=0
@for /f "delims=" %%j in ('dir /b c*.txt') do (
@find "%%i" "%%j" >nul
@set /a r+=!errorlevel!
)
@if !r!==0 (
@set f=%%i
@if !f! GTR 500000 (@echo +%%i) else (@echo -%%i)
)
)
@endlocal
@pause
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式