批处理比对多文本文件的 找出相同内容另存为一个文本
大家好。我想达到如下效果。不知道能否用批处理实现?某目录下有几个文本文件,希望通过批处理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
谢谢 展开
某目录下有几个文本文件, 希望通过批处理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
谢谢 展开
3个回答
展开全部
@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并没有被排除。
这是为什么??????
展开全部
批处理可能难以实现,建议导入EXCEL用函数处理。如果这类工作固定模式频繁重复,找人写个小程序,或在ACESS中处理。
追问
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚完成,我按您的描述做了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
结果应该完全符合您的要求,不过我假定各列之间是用空格分隔的。
@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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询